目前我正在使用fs.createWriteStream(filePath)
做两件事:
但是,我实际上从未写过流,所以我并没有真正使用它。我想知道这是多么犹豫,如果我不应该使用更高效或更明确的方法来创建文件,如果它不存在并清除文件。有什么想法吗?
答案 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()之间应该没有什么性能差异,但是它可以让你避免检查文件是否存在,如果存在则删除它,以及创建新文件。
我假设您一次只有一个进程访问此文件。