如果文件存在而不是覆盖它,我想让这段代码更改文件名。
var fileName = 'file';
fs.writeFile(fileName + '.txt', 'Random text', function (err) {
if (err) throw err;
console.log('It\'s saved!');
});
类似的东西:
var fileName = 'file',
checkFileName = fileName,
i = 0;
while(fileExists(checkFileName + '.txt')) {
i++;
checkFileName = fileName + '-' + i;
} // file-1, file-2, file-3...
fileName = checkFileName;
fs.writeFile(fileName + '.txt', 'Random text', function (err) {
if (err) throw err;
console.log('It\'s saved!');
});
我如何制作" fileExists"函数,考虑到fs.exists()
现已弃用,fs.statSync()
或fs.accessSync()
如果文件不存在则抛出错误。也许有更好的方法来实现这个目标?
答案 0 :(得分:13)
使用writeFile
并将第三个参数设置为{flag: "wx"}
(有关标志的概述,请参阅fs.open)。这样,它在文件已经存在时失败,并且它还避免了在exists
和writeFile
调用之间创建文件的可能竞争条件。
在已存在的情况下以不同名称写入文件的示例代码。
fs = require('fs');
var filename = "test";
function writeFile() {
fs.writeFile(filename, "some data", { flag: "wx" }, function(err) {
if (err) {
console.log("file " + filename + " already exists, testing next");
filename = filename + "0";
writeFile();
}
else {
console.log("Succesfully written " + filename);
}
});
}
writeFile();