Node.js 'fs' - 更高效的创建文件+清除文件的方式

Node.js 'fs' - More efficient way to create file + clear file

目前我正在使用 fs.createWriteStream(filePath) 做两件事:

  1. 如果文件不存在则创建
  2. Clear/delete文件内容

但是,我从来没有真正写入流,所以我并没有真正使用它。我想知道这是怎么回事,如果文件不存在并清除文件,我是否应该使用更有效或更明确的方法来创建文件。有什么想法吗?

最好不要打开文件,除非您确实要写入文件。您可以为 open 和 write 编写一些包装函数以延迟打开文件,直到需要写入。

var fd;

function open() {
    if (fd) {
        return;
    }
    fd = fs.open(filePath, 'w');
}

function write(buffer) {
    if (!fd) {
        open();
        fs.writeFile(fd, buffer);
    } else {
        fs.write(fd, buffer);
    }
}


write('open file and write');
write('write to already opened file');

打开时,使用 fs.open 和 'w' 标志,这意味着文件被创建(如果不存在)或被截断(如果存在)。

另一种方法是write()函数在第一次写入文件时调用fs.writeFile,这将覆盖文件现有的内容,并调用fs.write后续写入追加。

实际上,使用 writeFile() 和 write() 之间应该没有什么性能差异,但它可以让您避免检查文件是否存在,如果存在则将其删除,并创建一个新文件。

我假设您一次只有一个进程访问此文件。

根据您的要求,张贴我的评论作为答复...

fs.open(filePath, 'w+') 使用 'w''w+' 标志也将 create/truncate 文件。

我认为它实际上不会给您带来与您的 fs.createWriteStream(filePath) 不同的结果,并且代码执行差异可能微不足道,特别是考虑到涉及磁盘 I/O。但是,它可能感觉更干净一些,因为它没有设置您不会使用的流。

可以直接使用

fs.writeFile('file path',<data to write>,'encoding',callback)   //in your case data is empty

如果文件不存在则创建文件,如果存在则首先清除内容并向其中添加新内容