zoukankan      html  css  js  c++  java
  • Node.js

    fs.readFile(path[, options], callback)

     

    异步地读取一个文件的全部内容。 例子:

    fs.readFile('/etc/passwd', (err, data) => {
      if (err) throw err;
      console.log(data);
    });
    

    回调有两个参数 (err, data),其中 data 是文件的内容。

    如果未指定字符编码,则返回原始的 buffer。

    如果 options 是一个字符串,则它指定了字符编码。 例子:

    fs.readFile('/etc/passwd', 'utf8', callback);
    

    注意:当 path 是一个目录时,fs.readFile() 与 fs.readFileSync() 的行为与平台有关。 在 macOS、Linux 与 Windows 上,会返回一个错误。 在 FreeBSD 上,会返回目录内容的表示。

    // 在 macOS、Linux 与 Windows 上:
    fs.readFile('<directory>', (err, data) => {
      // => [Error: EISDIR: illegal operation on a directory, read <directory>]
    });
    
    //  在 FreeBSD 上:
    fs.readFile('<directory>', (err, data) => {
      // => null, <data>
    });
    

    任何指定的文件描述符必须支持读取。

    注意:如果一个文件描述符被指定为 path,则它不会被自动关闭。

    fs.readFileSync(path[, options])

     

    fs.readFile() 的同步版本。 返回 path 的内容。

    如果指定了 encoding 选项,则该函数返回一个字符串,否则返回一个 buffer。

    请注意: 与fs.readFile()相似, 当路径是目录时,fs.readFileSync()的行为是基于平台的。

    // macOS, Linux 和 Windows
    fs.readFileSync('<directory>');
    // => [Error: EISDIR: illegal operation on a directory, read <directory>]
    
    //  FreeBSD
    fs.readFileSync('<directory>'); // => null, <data>
    

    fs.readlink(path[, options], callback)

     

    异步的 readlink(2)。 回调有两个参数 (err, linkString)

    可选的 options 参数用于传入回调的链接路径,它可以是一个字符串并指定一个字符编码,或是一个对象且由一个 encoding 属性指定使用的字符编码。 如果 encoding 设为 'buffer',则返回的链接路径会被作为 Buffer 对象传入。

    fs.readlinkSync(path[, options])

    同步的 readlink(2)。 返回符号链接的字符串值。

    可选的 options 参数用于传入回调的链接路径,它可以是一个字符串并指定一个字符编码,或是一个对象且由一个 encoding 属性指定使用的字符编码。 如果 encoding 设为 'buffer',则返回的链接路径会被作为 Buffer 对象传入。

    fs.readSync(fd, buffer, offset, length, position)

     

    fs.read() 的同步版本。 返回 bytesRead 的数量。

    fs.realpath(path[, options], callback)

     

    异步的 realpath(3)。 callback 有两个参数 (err, resolvedPath)。 可以使用 process.cwd 解析相对路径。

    只支持可转换成 UTF8 字符串的路径。

    可选的 options 参数用于传入回调的路径,它可以是一个字符串并指定一个字符编码,或是一个对象且由一个 encoding 属性指定使用的字符编码。 如果 encoding 设为 'buffer',则返回的路径会被作为 Buffer 对象传入。

    Note: If path resolves to a socket or a pipe, the function will return a system dependent name for that object.

    fs.realpathSync(path[, options])

     

    同步的 realpath(3)。 返回解析的路径。

    只支持可转换成 UTF8 字符串的路径。

    可选的 options 参数用于传入回调的路径,它可以是一个字符串并指定一个字符编码,或是一个对象且由一个 encoding 属性指定使用的字符编码。 如果 encoding 设为 'buffer',则返回的路径会被作为 Buffer 对象传入。

    Note: If path resolves to a socket or a pipe, the function will return a system dependent name for that object.

    fs.rename(oldPath, newPath, callback)

     

    异步的 rename(2)。 完成回调只有一个可能的异常参数。

    fs.renameSync(oldPath, newPath)

     

    同步的 rename(2)。返回 undefined

    fs.rmdir(path, callback)

     

    异步的 rmdir(2)。 完成回调只有一个可能的异常参数。

    请注意: 在文件上(而不是目录上)使用fs.rmdir(),在Windows平台将会导致ENOENT错误,而在POSIX平台将会导致ENOTDIR错误。

    fs.rmdirSync(path)

     

    同步的 rmdir(2)。返回 undefined

    请注意: 在文件上(而不是目录上)使用fs.rmdirSync(),在Windows平台将会导致ENOENT错误,而在POSIX平台将会导致ENOTDIR错误。

    fs.stat(path, callback)

     

    异步的 stat(2)。 回调有两个参数 (err, stats) 其中 stats 是一个 fs.Stats 对象。

    如果发生错误,则 err.code 会是常见系统错误之一。

    不建议在调用 fs.open() 、fs.readFile() 或 fs.writeFile() 之前使用 fs.stat() 检查一个文件是否存在。 作为替代,用户代码应该直接打开/读取/写入文件,当文件无效时再处理错误。

    如果要检查一个文件是否存在且不操作它,推荐使用 fs.access()

    fs.statSync(path)

     

    同步的 stat(2)。 返回一个 fs.Stats 实例。

    fs.symlink(target, path[, type], callback)

     

    异步的 symlink(2)。 完成回调只有一个可能的异常参数。 type 参数可以设为 'dir''file' 或 'junction'(默认为 'file'),且仅在 Windows 上有效(在其他平台上忽略)。 注意,Windows 结点要求目标路径是绝对的。 当使用 'junction'时,target 参数会被自动标准化为绝对路径。

    例子:

    fs.symlink('./foo', './new-port', callback);
    

    它创建了一个名为 "new-port" 且指向 "foo" 的符号链接。

    fs.symlinkSync(target, path[, type])

     

    同步的 symlink(2)。返回 undefined

    fs.truncate(path[, len], callback)

     

    异步的 truncate(2)。 完成回调只有一个可能的异常参数。 文件描述符也可以作为第一个参数传入,在这种情况下,fs.ftruncate() 会被调用。

    fs.truncateSync(path[, len])

     

    同步的 truncate(2)。 返回 undefined。 文件描述符也可以作为第一个参数传入,在这种情况下,fs.ftruncateSync() 会被调用。

    fs.unlink(path, callback)

     

    异步的 unlink(2)。 完成回调只有一个可能的异常参数。

    fs.unlinkSync(path)

    同步的 unlink(2)。返回 undefined

    fs.unwatchFile(filename[, listener])

     

    停止监视 filename 文件的变化。 如果指定了 listener,则只移除特定的监听器。 否则,所有的监听器都会被移除,且已经有效地停止监视 filename

    调用 fs.unwatchFile() 且带上一个未被监视的文件名,将会是一个空操作,而不是一个错误。

    注意:fs.watch() 比 fs.watchFile() 和 fs.unwatchFile() 更高效。 可能的话,应该使用 fs.watch() 而不是 fs.watchFile()和 fs.unwatchFile()

    fs.utimes(path, atime, mtime, callback)

     

    改变指定的路径所指向的文件的文件时间戳。

    注意:atime 和 mtime 参数遵循以下规则:

    • 值应该是一个以秒为单位的 Unix 时间戳。 例如,Date.now() 返回毫秒,所以在传入前应该除以1000。
    • 如果值是一个数值字符串,如 '123456789',则该值会被转换为对应的数值。
    • 如果值是 NaN 、 Infinity 或 -Infinity,则会抛出错误。

    fs.utimesSync(path, atime, mtime)

     

    fs.utimes() 的同步版本。返回 undefined

    fs.watch(filename[, options][, listener])

     

    • filename <string> | <Buffer> | <URL>
    • options <string> | <Object>
      • persistent <boolean> 指明如果文件正在被监视,进程是否应该继续运行。默认 = true
      • recursive <boolean> 指明是否全部子目录应该被监视,或只是当前目录。 适用于当一个目录被指定时,且只在支持的平台(详见 Caveats)。默认 = false
      • encoding <string> 指定用于传给监听器的文件名的字符编码。默认 = 'utf8'
    • listener <Function> | <undefined> Default: undefined

    监视 filename 的变化,filename 可以是一个文件或一个目录。 返回的对象是一个 fs.FSWatcher

    第二个参数是可选的。 如果提供的 options 是一个字符串,则它指定了 encoding。 否则 options 应该以一个对象传入。

    监听器回调有两个参数 (eventType, filename)。 eventType 可以是 'rename' 或 'change'filename 是触发事件的文件的名称。

    注意,在大多数平台,当一个文件出现或消失在一个目录里时,'rename' 会被触发。

    还需要注意,监听器回调是绑定在由 fs.FSWatcher 触发的 'change' 事件上,但它跟 eventType 的 'change' 值不是同一个东西。

    说明

     

    fs.watch API 不是 100% 跨平台一致的,且在某些情况下不可用。

    递归选项只支持 macOS 和 Windows。

    可用性

     

    该特性依赖于底层操作系统提供的一种方法来通知文件系统的变化。

    • 在 Linux 系统中,使用 inotify
    • 在 BSD 系统中,使用 kqueue
    • 在 macOS 系统中,对文件使用 kqueue,对目录使用 FSEvents
    • 在 SunOS 系统(包括 Solaris 和 SmartOS)中,使用 event ports
    • 在 Windows 系统中,该特性依赖 ReadDirectoryChangesW
    • 在 Aix 系统中,该特性依赖 AHAFS 必须是启动的。

    如果底层功能因某些原因不可用,则 fs.watch 也无法正常工作。 例如,当使用虚拟化软件如 Vagrant、Docker 等时,在网络文件系统(NFS、SMB 等)或主文件系统中监视文件或目录可能是不可靠的。

    您仍然可以使用基于stat轮询的fs.watchFile(),但是这种方法更慢,可靠性也更低。

    索引节点#

    查看英文版 / 参与翻译

    在 Linux 或 macOS 系统中,fs.watch() 解析路径到一个索引节点,并监视该索引节点。 如果监视的路径被删除或重建,则它会被分配一个新的索引节点。 监视器会发出一个删除事件,但会继续监视原始的索引节点。 新建的索引节点的事件不会被触发。 这是正常的行为。

    In AIX, save and close of a file being watched causes two notifications - one for adding new content, and one for truncation. Moreover, save and close operations on some platforms cause inode changes that force watch operations to become invalid and ineffective. AIX retains inode for the lifetime of a file, that way though this is different from Linux / macOS, this improves the usability of file watching. This is expected behavior.

    文件名参数

     

    回调中提供的 filename 参数仅在 Linux、macOS、Windows、以及 AIX 系统上支持。 即使在支持的平台中,filename 也不能保证提供。 因此,不要以为 filename 参数总是在回调中提供,如果它是空的,需要有一定的后备逻辑。

    fs.watch('somedir', (eventType, filename) => {
      console.log(`事件类型是: ${eventType}`);
      if (filename) {
        console.log(`提供的文件名: ${filename}`);
      } else {
        console.log('未提供文件名');
      }
    });
    

    fs.watchFile(filename[, options], listener)

     

    监视 filename 的变化。 回调 listener 会在每次访问文件时被调用。

    options 参数可被省略。 如果提供的话,它应该是一个对象。 options 对象可能包含一个名为 persistent 的布尔值,表明当文件正在被监视时,进程是否应该继续运行。 options 对象可以指定一个 interval 属性,表示目标应该每隔多少毫秒被轮询。 默认值为 { persistent: true, interval: 5007 }

    listener 有两个参数,当前的状态对象和以前的状态对象:

    fs.watchFile('message.text', (curr, prev) => {
      console.log(`the current mtime is: ${curr.mtime}`);
      console.log(`the previous mtime was: ${prev.mtime}`);
    });
    

    These stat objects are instances of fs.Stat. 这里的状态对象是 fs.Stat 实例。

    如果你想在文件被修改而不只是访问时得到通知,则需要比较 curr.mtime 和 prev.mtime

    注意:当一个 fs.watchFile 的运行结果是一个 ENOENT 错误时,它会调用监听器一次,且将所有字段置零(或将日期设为 Unix 纪元)。 在 Windows 中,blksize 和 blocks 字段会是 undefined 而不是零。 如果文件是在那之后创建的,则监听器会被再次调用,且带上最新的状态对象。 这是在 v0.10 版之后在功能上的变化。

    注意:fs.watch() 比 fs.watchFile 和 fs.unwatchFile 更高效。 可能的话,应该使用 fs.watch 而不是 fs.watchFile 和 fs.unwatchFile

    fs.write(fd, buffer[, offset[, length[, position]]], callback)

     

    写入 buffer 到 fd 指定的文件。

    offset 决定 buffer 中被写入的部分,length 是一个整数,指定要写入的字节数。

    position 指向从文件开始写入数据的位置的偏移量。 如果 typeof position !== 'number',则数据从当前位置写入。详见 pwrite(2)

    回调有三个参数 (err, bytesWritten, buffer),其中 bytesWritten 指定从 buffer 写入了多少字节。

    If this method is invoked as its util.promisify()ed version, it returns a Promise for an object with bytesWritten and buffer properties.

    注意,多次对同一文件使用 fs.write 且不等待回调,是不安全的。 对于这种情况,强烈推荐使用 fs.createWriteStream

    在 Linux 上,当文件以追加模式打开时,指定位置的写入是不起作用的。 内核会忽略位置参数,并总是将数据追加到文件的末尾。

    fs.write(fd, string[, position[, encoding]], callback)

     

    写入 string 到 fd 指定的文件。 如果 string 不是一个字符串,则该值将被强制转换为一个字符串。

    position 指向从文件开始写入数据的位置的偏移量。 如果 typeof position !== 'number',则数据从当前位置写入。详见 pwrite(2)

    encoding 是期望的字符串编码。

    回调有三个参数 (err, written, string),其中 written 指定传入的字符串被写入多少字节。 注意,写入的字节与字符串的字符是不同的。详见 Buffer.byteLength

    不同于写入 buffer,该方法整个字符串必须被写入。 不能指定子字符串。 这是因为结果数据的字节偏移量可能与字符串的偏移量不同。

    注意,多次对同一文件使用 fs.write 且不等待回调,是不安全的。 对于这种情况,强烈推荐使用 fs.createWriteStream

    在 Linux 上,当文件以追加模式打开时,指定位置的写入是不起作用的。 内核会忽略位置参数,并总是将数据追加到文件的末尾。

    fs.writeFile(file, data[, options], callback)

     

    异步地写入数据到文件,如果文件已经存在,则替代文件。 data 可以是一个字符串或一个 buffer。

    如果 data 是一个 buffer,则忽略 encoding 选项。它默认为 'utf8'

    例子:

    fs.writeFile('message.txt', 'Hello Node.js', (err) => {
      if (err) throw err;
      console.log('The file has been saved!');
    });
    

    如果 options 是一个字符串,则它指定了字符编码。例如:

    fs.writeFile('message.txt', 'Hello Node.js', 'utf8', callback);
    

    任何指定的文件描述符必须支持写入。

    注意,多次对同一文件使用 fs.writeFile 且不等待回调,是不安全的。 对于这种情况,强烈推荐使用 fs.createWriteStream

    注意:如果 file 指定为一个文件描述符,则它不会被自动关闭。

    fs.writeFileSync(file, data[, options])

     

    fs.writeFile() 的同步版本。返回 undefined

    fs.writeSync(fd, buffer[, offset[, length[, position]]])

     

    fs.writeSync(fd, string[, position[, encoding]])

     

    fs.write() 的同步版本。返回写入的字节数。

  • 相关阅读:
    pycharm运行Django项目,提示UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6
    linux环境下 python环境import找不到自定义的模块
    python-获取URL中的json数据
    python-Excel读取-合并单元格读取
    自动驾驶控制算法第七讲 离散规划轨迹的误差计算
    静态语言和动态语言的区别
    Python函数-导入模块的顺序及原理
    使用Visual Studio查看C++类内存分布
    在VisualStudio调试器中使用内存窗口和查看内存分布
    visual studio 2019工具里添加开发中命令提示符的方法
  • 原文地址:https://www.cnblogs.com/zgqdbxb/p/7577212.html
Copyright © 2011-2022 走看看