如果文件不存在,则创建一个文件
Posted
技术标签:
【中文标题】如果文件不存在,则创建一个文件【英文标题】:Create a file if it doesn't already exist 【发布时间】:2015-09-20 14:55:02 【问题描述】:我想创建一个文件foobar
。但是,如果用户已经有一个名为 foobar
的文件,那么我不想覆盖他们的文件。所以我只想在 foobar
不存在的情况下创建它。
起初,我认为我应该这样做:
fs.exists(filename, function(exists)
if(exists)
// Create file
else
console.log("Refusing to overwrite existing", filename);
);
但是,查看official documentation 对应的fs.exists
,它显示为:
fs.exists() 是不合时宜的,仅出于历史原因而存在。 几乎不应该有理由在您自己的代码中使用它。
特别是,在打开文件之前检查文件是否存在 让你容易受到竞争条件影响的反模式:另一个 进程可能会在调用 fs.exists() 和 fs.open()。只需打开文件并在错误时处理错误 在那里。
fs.exists() 将被弃用。
显然,节点开发人员认为我的方法是个坏主意。另外,我不想使用将被弃用的函数。
如何在不覆盖现有文件的情况下创建文件?
【问题讨论】:
它告诉你:打开文件并处理错误(或缺少错误) 【参考方案1】:import promises as fs from "fs";
fs.readFile(path).catch(() =>
fs.writeFile(path, content);
);
【讨论】:
请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票。 噢,来吧大家,没有必要对新手发布一个实际上与问题相关且有帮助的代码 sn-p 感到沮丧。是的,解释会改善这个答案,但说根本不发布答案?必须有更好的方式来欢迎@pushkine 访问该网站。【参考方案2】:fs.closeSync(fs.openSync('/var/log/my.log', 'a'))
【讨论】:
【参考方案3】:如果您想稍后将数据写入此文件,可以使用fs.appendFile('message.txt', 'data to append', 'utf8', callback);
。
将数据异步附加到文件中,如果文件尚不存在则创建文件。数据可以是字符串或缓冲区。
Node file system documentation.
【讨论】:
【参考方案4】:我认为答案是:
只需打开文件并在错误不存在时处理它。
尝试类似:
function createFile(filename)
fs.open(filename,'r',function(err, fd)
if (err)
fs.writeFile(filename, '', function(err)
if(err)
console.log(err);
console.log("The file was saved!");
);
else
console.log("The file exists!");
);
【讨论】:
以上是关于如果文件不存在,则创建一个文件的主要内容,如果未能解决你的问题,请参考以下文章