" EXDEV:不允许跨设备链接"错误意味着?

时间:2017-04-04 11:40:37

标签: node.js libuv

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

this libuv page上提到了它,但它没有提供任何超出"跨设备链接的详细信息"。

4 个答案:

答案 0 :(得分:9)

听起来你正试图在"设备"之间重命名文件。 (分区)边界。

假设/tmp是与/不同的分区。这意味着你不允许这样做:

fs.rename('/tmp/myfile.txt', '/myfile.txt', ...)

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

如果要执行此操作,则需要先将复制文件移至新位置,然后删除旧文件。有一些模块,比如mv,可以帮助你。

答案 1 :(得分:6)

它用于Linux上的EXDEV:

请参阅man rename联机帮助页:

  

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

Windows上有ERROR_NOT_SAME_DEVICE时也会使用此错误,请参阅:

有关详细信息,请参阅:

  

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

对于使用Linux的人来说,当您的旧路径(即/tmp和新路径位于不同的分区或磁盘上时)会发生这种情况。