Node.js FS 文件系统标志

🌙
手机阅读
本文目录结构

Node.js FS 文件系统标志

当 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’ 模式。

某些标志的行为是特定于平台的。 例如,使用 ‘a+’ 标志打开 macOS 和 Linux 上的目录(参阅下面的示例)将返回错误。 而在 Windows 和 FreeBSD 上,则返回文件描述符或 FileHandle。

// 在 macOS 和 Linux 上:
fs.open('<目录>', 'a+', (err, fd) => {
  // => [Error: EISDIR: illegal operation on a directory, open <目录>]
});

// 在 Windows 和 FreeBSD 上:
fs.open('<目录>', 'a+', (err, fd) => {
  // => null, <fd>
});

在 Windows 上,使用 ‘w’ 标志(通过 fs.open()、 fs.writeFile() 或 fsPromises.open())打开现有的隐藏文件将抛出 EPERM。 隐藏文件可以使用 ‘r+’ 标志打开用于写入。

可以调用 fs.ftruncate() 或 fsPromises.ftruncate() 来重置文件的内容。


更多内容请参考:Node.js fs 文件系统,或者通过 点击对应菜单 进行查看;



AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

目前重心已经放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>