"EXDEV:跨设备链接不允许"错误是什么意思?

cal*_*lum 16 node.js libuv

这个错误究竟意味着什么?什么是"跨设备链接"?

此libuv页面上提到它,但除了"不允许交叉设备链接"之外,它不提供任何详细信息.

rob*_*lep 15

听起来你正在尝试跨"设备"(分区)边界重命名文件.

说这/tmp是一个不同的分区/.这意味着你不允许这样做:

fs.rename('/tmp/myfile.txt', '/myfile.txt', ...)
Run Code Online (Sandbox Code Playgroud)

(同样适用于fs.renameSync(),显然)

如果要这样做,则需要先将文件复制到新位置,然后删除旧文件.有一些模块,mv可以帮助你.

  • 在文件系统模块中使用** copyFile **和** unlink **的组合也可以解决问题。 (3认同)
  • @AmirSyafrudin是的,但是当我写这个答案时,`fs.copyFile`不存在:D (3认同)
  • 确实.只是想添加它,以防任何像我这样的新手偶然发现你的答案.:) (2认同)

rsp*_*rsp 9

它用于Linux上的EXDEV:

请参见手册man rename页:

EXDEV oldpath和newpath不在同一个挂载的文件系统上.(Linux允许文件系统在多个点安装,但rename()在不同的安装点上不起作用,即使两者都安装了相同的文件系统.)

ERROR_NOT_SAME_DEVICEWindows上有此错误,请参阅:

有关详情,请参阅:

winerror.h 0x80070011 #define ERROR_NOT_SAME_DEVICE 系统无法将文件移动到其他磁盘驱动器.


小智 5

我猜您正试图从/temp表单中复制文件夹中的文件。我解决了它的应对,而不是重命名

        fs.copyFile(oldpath, newpath, function (err) {
            if (err) throw err;
            res.write('File uploaded and moved!');
            res.end();
        });
Run Code Online (Sandbox Code Playgroud)