【发布时间】:2015-06-18 18:14:55
【问题描述】:
我有以下代码将文件从一个目录移动到另一个目录:
var fs = require('fs'),
oldPath = 'firstfile.txt',
newPath = 'temp/firstfile.txt';
fs.rename(oldPath, newPath, function (err) {
console.log('rename callback ', err);
});
如果newPath文件已经存在,是否可以触发错误?
【问题讨论】:
-
为什么不先检查它是否存在?
-
我想用一个操作来实现
-
@TristanFoureur 因为这会引入竞争条件 - 可以在 OP 调用
.stat以检查是否存在和调用.rename之间创建文件(或从另一个进程重命名) .这就是为什么.exists在文档中不被鼓励并且在新版本中被弃用的部分原因。 -
@BenjaminGruenbaum 是的,这是真的,但是你建议什么解决方案?除了在检查之前使用强制锁定文件挂载并锁定目标路径外,我没有看到 100% 竞争条件证明的问题。
-
@Erik 我们可以假设旧路径和新路径都在同一个挂载的文件系统上吗?
标签: node.js file-rename fs