使用 fs.rename 或 fs.renameSync 无法在 Debian Wheezy 上重命名文件。
这只发生在从 /tmp/ 移动到另一个位置的文件中。
报错为:EXDEV, cross-device link not allowed。
这是另一个适合我的解决方案:
var fs = require("fs"),
util = require('util');
...
//fs.renameSync(files.upload.path, "/tmp/test.png");
var readStream = fs.createReadStream(files.upload.path)
var writeStream = fs.createWriteStream("/tmp/test.png");
util.pump(readStream, writeStream, function() {
fs.unlinkSync(files.upload.path);
});
Debian Wheezy 默认使用 tmpfs 作为 /tmp 文件夹。
可以通过修改 /etc/default/rcS 来关闭此功能。
RAMTMP=yes
必须设置为
RAMTMP=no
当我没有将目录名和文件相对路径(从 fileRenameScript.js 文件目录)包含到我试图重命名的文件时,遇到了这个问题。
for(let i=0; i<readdirFileNames.length; i++){
fs.rename(__dirname+”/sample/strings/“+ readdirFileNames[i],
__dirname+”/sample/strings/“+ readdirFileNames[i].split(“trashToRemove”).join(“”),
()=>{
console.log(“File renamed”)
})
}
这就是经过重命名后对我有用的代码。如果其他人看到此问题,请参考该代码以查看文件名重命名所需的详细程度。
如果文件不存在,则不会出现错误,也不会出现任何解释文件名未更改原因的信息。 Fs rename 继续进行,就好像它成功了一样。当我最终进行更改时,代码的运行方式或输出内容几乎没有变化。
我在 Node v20.2.0 中见证了这种行为。