这个错误究竟意味着什么?什么是"跨设备链接"?
在this libuv page上提到了它,但它没有提供任何超出"跨设备链接的详细信息"。
答案 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
和新路径位于不同的分区或磁盘上时)会发生这种情况。