文件系统标志
当 flag
选项采用字符串时,可用以下标志:
'a'
- 打开文件用于追加。如果文件不存在,则创建该文件。'ax'
- 与'a'
相似,但如果路径已存在则失败。'a+'
- 打开文件用于读取和追加。如果文件不存在,则创建该文件。'ax+'
- 与'a+'
相似,但如果路径已存在则失败。'as'
- 以同步模式打开文件用于追加。如果文件不存在,则创建该文件。'as+'
- 以同步模式打开文件用于读取和追加。如果文件不存在,则创建该文件。'r'
- 打开文件用于读取。如果文件不存在,则出现异常。'r+'
- 打开文件用于读取和写入。如果文件不存在,则出现异常。'rs+'
- 以同步模式打开文件用于读取和写入。指示操作系统绕过本地的文件系统缓存。这对于在 NFS 挂载上打开文件时非常有用,因为它允许跳过可能过时的本地缓存。 它对 I/O 性能有非常实际的影响,因此除非需要,否则不建议使用此标志。
这不会将
fs.open()
或fsPromises.open()
转换为同步的阻塞调用。 如果需要同步的操作,则应使用fs.openSync()
之类的。'w'
- 打开文件用于写入。如果文件不存在则创建文件,如果文件已存在则截断文件。'wx'
- 与'w'
相似,但如果路径已存在则失败。'w+'
- 打开文件用于读取和写入。如果文件不存在则创建文件,如果文件已存在则截断文件。'wx+'
- 与'w+'
相似,但如果路径已存在则失败。
flag
也可以是一个数字,参阅 open(2)
文档。 常用的常量可以从 fs.constants
获取。 在 Windows 上,标志会被适当地转换为等效的标志,例如 O_WRONLY
转换为 FILE_GENERIC_WRITE
、 O_EXCL|O_CREAT
转换为能被 CreateFileW
接受的 CREATE_NEW
。
特有的 'x'
标志( open(2)
中的 O_EXCL
标志)可以确保路径是新创建的。 在 POSIX 系统上,即使路径是一个符号链接且指向一个不存在的文件,它也会被视为已存在。 该特有标志不一定适用于网络文件系统。
在 Linux 上,当以追加模式打开文件时,写入无法指定位置。 内核会忽略位置参数,并始终将数据追加到文件的末尾。
如果要修改文件而不是覆盖文件,则标志模式应为 'r+'
模式而不是默认的 'w'
模式。
某些标志的行为是特定于平台的。 例如,在 macOS 和 Linux 上使用 'a+'
标志打开目录(参阅下面的示例)会返回一个错误。 而在 Windows 和 FreeBSD 上,则返回一个文件描述符或 FileHandle
。
1 | // 在 macOS 和 Linux 上: |
在 Windows 上,使用 'w'
标志打开现存的隐藏文件(通过 fs.open()
、 fs.writeFile()
或 fsPromises.open()
)会抛出 EPERM
。 现存的隐藏文件可以使用 'r+'
标志打开用于写入。
调用 fs.ftruncate()
或 fsPromises.ftruncate()
可以用于重置文件的内容。