File 对node.js文件系统感到困惑

File 对node.js文件系统感到困惑,file,node.js,File,Node.js,我通过两个步骤使用nodejs编写文件: 1.首先判断文件是否存在,使用fs.exists功能 2.然后使用fs.writeFile直接写入文件 但现在我注意到有更多的函数用于写文件,比如fs.open或fs.close,我应该在写文件时使用这些函数来打开或关闭文件吗 此外,我注意到有fs.createReadStream和fs.createWriteStream函数,它们与fs.writeFile和fs.readFile之间有什么区别 低级别: 并处理文件描述符。这些是低级函数,表示BSD系统

我通过两个步骤使用nodejs编写文件:

1.首先判断文件是否存在,使用
fs.exists
功能

2.然后使用
fs.writeFile
直接写入文件

但现在我注意到有更多的函数用于写文件,比如
fs.open
fs.close
,我应该在写文件时使用这些函数来打开或关闭文件吗


此外,我注意到有
fs.createReadStream
fs.createWriteStream
函数,它们与
fs.writeFile
fs.readFile
之间有什么区别

低级别:

并处理文件描述符。这些是低级函数,表示BSD系统调用的映射调用。因为您将有一个文件描述符,所以您可以将它们与或一起使用

注意,所有这些都是异步的,也有同步版本:,,其中不使用回调。异步版本和同步版本之间的区别在于,
fs.openSync
仅在打开文件的操作完成时返回,而
fs.open
会立即返回,您可以在回调中使用文件描述符

这些低级函数可以让您完全控制,但意味着需要更多的编码

中级:

并创建可以连接到事件的流对象。这些事件的示例有“数据”(当数据块已被读取,但该数据块只是文件的一部分)或“关闭”。这样做的好处是,您可以读取文件并在数据进入时对其进行处理,也就是说,您不必读取整个文件,将其保存在内存中,然后对其进行处理。这在处理大型文件时很有意义,因为在处理块中的位时,可以获得更好的性能,而不是处理整个文件(例如,内存中的整个1GB文件)

高级别:

并对整个文件进行操作。因此,您可以调用
fs.readFile
,节点将读取整个文件,然后在回调中显示整个数据。这样做的好处是,您不需要处理大小不同的块(如使用流时)。写入时,节点将写入整个文件。这种方法的缺点是,在读/写时,必须将整个文件存储在内存中。例如,如果要转换日志文件,则可能只需要几行数据,使用流,您无需等待文件在开始写入之前完全读入即可完成此操作

还有一些,它们不会使用回调,而是等待读/写操作完成后再返回。使用此选项的优点是,对于小文件,您可能不希望在文件返回之前执行任何操作,但对于大文件,这意味着CPU将在等待文件I/O完成时空闲

希望在使用
fs.writeFile
时,您不需要
fs.open
fs.close
,这是对您问题的合理回答