Node.js' fs' - 更有效的方法来创建文件+清除文件

时间:2016-05-12 03:31:32

标签: node.js fs

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

  1. 如果文件不存在则创建
  2. 清除/删除文件内容
  3. 但是,我实际上从未写过流,所以我并没有真正使用它。我想知道这是多么犹豫,如果我不应该使用更高效或更明确的方法来创建文件,如果它不存在并清除文件。有什么想法吗?

3 个答案:

答案 0 :(得分:5)

根据您的要求,将我的评论作为答案发布......

fs.open(filePath, 'w+')使用'w''w+'标志也会创建/截断文件。

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

答案 1 :(得分:3)

您可以直接使用

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

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

答案 2 :(得分:1)

除非您真正要写入文件,否则最好不要打开文件。您可以编写一些打开和写入的包装函数来延迟打开文件,直到需要写入为止。

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');

打开时,使用带有'w'标志的fs.open表示创建文件(如果它不存在)或截断(如果存在)。

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

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

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