zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Node.js fs模块(三)目录操作

JSNode模块 操作 目录 fs
2023-09-14 09:13:41 时间

Node.js fs模块(二)_qfc_128220的博客-CSDN博客

前面已经介绍了fs模块进行文件读写的基本操作,接下来我们会学习fs模块进行文件夹的操作,如创建文件夹,删除文件夹,删除指定文件,读取文件夹内容,获取文件夹及文件信息,判断文件夹或文件是否有操作权限。

目录

fs.mkdir(path, options, callback)

1、目录已存在,重复创建会发生什么

2、创建的目录是多级的,该如何处理 

fs.rmdir(path, options, callback)

fs.unlink(path, callback)

fs.readdir(path, options, callback)

fs.access(path, mode, callback)


fs.mkdir(path, options, callback)

创建目录

形参解析

path:传入将要被创建的文件夹路径

options.recursive:表示是否创建父目录

callback(err, path):err是创建文件夹过程产生的错误信息,path是创建的第一个目录路径

创建目录,我们需要注意几个问题:

1、目录已存在,重复创建会发生什么

 重复创建目录不会发生报错,只是fs.mkdir的回调函数path参数会返回undefined

2、创建的目录是多级的,该如何处理 

创建多级目录,需要设置options.recursive为true,才能将多级目录都创建成功,并且fs.mkdir的回调函数形参path是第一级目录的所在路径

如果options.recursive为false,则无法创建多级目录,只支持单个目录创建

fs.rmdir(path, options, callback)

删除目录

形参分析

path:要删除的目录所在路径

callback:删除完成后的回调

注意这里删除的是 a/b ,即最终删除的是b目录,而a目录不受影响

需要注意的是fs.rmdir不支持递归删除多级目录,比如上面想删除a目录,但是a目录下还有一个b目录,所以fs.rmdir删除失败。

我们需要知道递归删除多级目录是一种非常危险的动作。毕竟rm -rf删库跑路不是浪得虚名的。我们应该谨慎使用递归删除目录,Node.js 很贴心,fs.rmdir直接从源头帮我们杜绝了。

fs.unlink(path, callback)

删除文件

和fs.rmdir区别是,fs.unlink适用于删除文件,而fs.rmdir适用于删除目录

fs.readdir(path, options, callback)

读取目录的内容 

形参分析

path:要读取的目录

options.encoding:读取的目录内容的编码格式,如字符串文件名的编码

callback(err, files):err错误优先,files即读取目录下的所有文件名,目录名

可以发现fs.readdir只能读取单级目录下的文件和文件夹名字,而无法递归读取到所有

另外关于options.encoding是用于控制callback(files)中文件名和目录名

如果改成options.encoding改成buffer,就会输出buffer格式的文件名和目录名 

fs.access(path, mode, callback)

测试用户对 path 指定的文件或目录的权限

其中 mode 是当前用户对该文件的权限,这里权限可以取值fs.constants

[Object: null prototype] {   
  UV_FS_SYMLINK_DIR: 1,      
  UV_FS_SYMLINK_JUNCTION: 2, 
  O_RDONLY: 0,
  O_WRONLY: 1,
  O_RDWR: 2,
  UV_DIRENT_UNKNOWN: 0,      
  UV_DIRENT_FILE: 1,
  UV_DIRENT_DIR: 2,
  UV_DIRENT_LINK: 3,
  UV_DIRENT_FIFO: 4,
  UV_DIRENT_SOCKET: 5,       
  UV_DIRENT_CHAR: 6,
  UV_DIRENT_BLOCK: 7,        
  S_IFMT: 61440,
  S_IFREG: 32768,
  S_IFDIR: 16384,
  S_IFCHR: 8192,
  S_IFLNK: 40960,
  O_CREAT: 256,
  O_EXCL: 1024,
  UV_FS_O_FILEMAP: 536870912,
  O_TRUNC: 512,
  O_APPEND: 8,
  F_OK: 0,
  R_OK: 4,
  W_OK: 2,
  X_OK: 1,
  UV_FS_COPYFILE_EXCL: 1,    
  COPYFILE_EXCL: 1,
  UV_FS_COPYFILE_FICLONE: 2, 
  COPYFILE_FICLONE: 2,
  UV_FS_COPYFILE_FICLONE_FORCE: 4,
  COPYFILE_FICLONE_FORCE: 4
}

较为常见的有:

F_OK 文件存在

 R_OK 文件可读

W_OK 文件可写

 X_OK 文件可执行

fs.access还有一点需要注意,fs.acess不要和fs.open一起使用,二者一起使用会产生竞争关系。