Node.JS fs.rename 不起作用

问题描述 投票:0回答:3

使用 fs.rename 或 fs.renameSync 无法在 Debian Wheezy 上重命名文件。

这只发生在从 /tmp/ 移动到另一个位置的文件中。

报错为:EXDEV, cross-device link not allowed。

node.js file-io debian
3个回答
2
投票

这是另一个适合我的解决方案:

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);
});

0
投票

Debian Wheezy 默认使用 tmpfs 作为 /tmp 文件夹。

可以通过修改 /etc/default/rcS 来关闭此功能。

RAMTMP=yes

必须设置为

RAMTMP=no

0
投票

当我没有将目录名和文件相对路径(从 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 中见证了这种行为。

© www.soinside.com 2019 - 2024. All rights reserved.