Node.js fs模块(二)_qfc_128220的博客-CSDN博客
前面已经介绍了fs模块进行文件读写的基本操作,接下来我们会学习fs模块进行文件夹的操作,如创建文件夹,删除文件夹,删除指定文件,读取文件夹内容,获取文件夹及文件信息,判断文件夹或文件是否有操作权限。
目录
fs.mkdir(path, options, callback)
fs.rmdir(path, options, 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一起使用,二者一起使用会产生竞争关系。