【发布时间】:2017-08-29 14:13:38
【问题描述】:
这个错误实际上是什么意思?什么是“跨设备链接”?
this libuv page 上提到了它,但除了“不允许跨设备链接”之外,它没有提供任何细节。
【问题讨论】:
这个错误实际上是什么意思?什么是“跨设备链接”?
this libuv page 上提到了它,但除了“不允许跨设备链接”之外,它没有提供任何细节。
【问题讨论】:
听起来您正在尝试跨“设备”(分区)边界重命名文件。
假设/tmp 与/ 是不同的分区。这意味着你不能这样做:
fs.rename('/tmp/myfile.txt', '/myfile.txt', ...)
(显然,fs.renameSync() 也是如此)
如果您想这样做,您需要先将文件复制到其新位置,然后删除旧文件。有一些模块,例如 mv,可以帮助您。
【讨论】:
fs.copyFile 在我写这个答案时并不存在:D
它用于Linux上的EXDEV:
参见man rename 联机帮助页:
EXDEV oldpath 和 newpath 不在同一个挂载的文件系统上。 (Linux 允许在多个点挂载文件系统, 但是 rename() 不能跨不同的挂载点工作,即使 如果两个都挂载了相同的文件系统。)
Windows上有ERROR_NOT_SAME_DEVICE时也会出现这个错误,见:
更多信息见:
winerror.h 0x80070011
#define ERROR_NOT_SAME_DEVICE系统无法将文件移动到其他磁盘驱动器。
【讨论】:
我猜你正试图从/temp 文件夹中复制一个文件,因为它是表单。我解决了它应对,而不是重命名
fs.copyFile(oldpath, newpath, function (err) {
if (err) throw err;
res.write('File uploaded and moved!');
res.end();
});
【讨论】:
对于使用 Linux 的人来说,当您的旧路径(即 /tmp)和新路径位于不同的分区或磁盘上时,就会发生这种情况。
【讨论】: