【问题标题】:Node.js 'fs' - More efficient way to create file + clear fileNode.js 'fs' - 创建文件 + 清除文件的更有效方式
【发布时间】:2016-09-07 16:33:21
【问题描述】:

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

  1. 如果文件不存在则创建文件
  2. 清除/删除文件内容

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

【问题讨论】:

  • fs.open() 带有 'w' 或 ''w+' 标志也将创建/截断文件。不清楚你真正问的是什么问题。
  • fs.open() with 'w+' 似乎是这样:'w+' - 打开文件进行读写。文件被创建(如果不存在)或被截断(如果存在)。
  • 好吧,fs.open() 可能是一个,你能补充一个答案吗?

标签: node.js fs


【解决方案1】:

可以直接使用

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

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

【讨论】:

  • 如果你想让它同步然后使用 fs.writeFileSync('file path',,'encoding')
【解决方案2】:

除非您真的要写入文件,否则最好不要打开文件。您可以为 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');

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

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

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

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

【讨论】:

  • 这很好,但并没有真正回答问题,没有反对意见,但也没有反对意见
  • 我已经更新了答案,说最有效的方法是在需要写入文件之前不打开文件,使用 fs.writeFile 应该会有一些性能提升,虽然是微不足道的()/fs.write() 而不是 fs.exists(), fs.unlink(), fs.write() 只是因为涉及的步骤更少。
【解决方案3】:

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

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

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

【讨论】:

  • @AlexMills - 这回答了你的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 2020-02-24
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
相关资源
最近更新 更多