Node.js 'fs' - 更高效的创建文件+清除文件的方式
Node.js 'fs' - More efficient way to create file + clear file
目前我正在使用 fs.createWriteStream(filePath)
做两件事:
- 如果文件不存在则创建
- 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
如果文件不存在则创建文件,如果存在则首先清除内容并向其中添加新内容
目前我正在使用 fs.createWriteStream(filePath)
做两件事:
- 如果文件不存在则创建
- 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
如果文件不存在则创建文件,如果存在则首先清除内容并向其中添加新内容