这个错误实际上意味着什么?什么是“跨设备链接”?在this libuv page上提到了这个问题,但是除了“不允许跨设备链接”之外,它没有给予任何细节。
rdrgkggo1#
这听起来像是您试图跨“设备”(分区)边界重命名文件。假设/tmp与/是不同的分区,这意味着不允许这样做:
/tmp
/
fs.rename('/tmp/myfile.txt', '/myfile.txt', ...)
(the显然,这同样适用于fs.renameSync())如果你想这样做,你需要先将文件复制到新的位置,然后删除旧的文件,有一些模块,比如mv,可以帮助你。
fs.renameSync()
mv
fumotvh32#
它用于Linux上的EXDEV:请参见man rename手册页:
man rename
EXDEV oldpath和newpath不在相同的挂载文件系统上。(Linux允许在多个点挂载文件系统,但rename()不能跨不同的挂载点工作,即使在两个挂载点上挂载了相同的文件系统。Windows上存在ERROR_NOT_SAME_DEVICE时也会出现此错误,请参阅:
ERROR_NOT_SAME_DEVICE
有关详细信息,请参阅:
winerror.h 0x80070011 #define ERROR_NOT_SAME_DEVICE系统无法将文件移动到其他磁盘驱动器。
#define ERROR_NOT_SAME_DEVICE
uelo1irk3#
我猜你是试图从/temp文件夹复制一个文件,因为形式。我解决了它复制,而不是重命名
/temp
fs.copyFile(oldpath, newpath, function (err) { if (err) throw err; res.write('File uploaded and moved!'); res.end(); });
ybzsozfc4#
只是对于那些使用Linux的人来说,当你的旧路径/tmp和新路径在不同的分区或磁盘上时,就会发生这种情况。
ve7v8dk25#
在本例中,我将代码从
for (const file of files) { const tempPath = file[1].filepath; await fs.rename(tempPath, targetPath + file[1].originalFilename); }
转换为以下代码
for (const file of files) { const tempPath = file[1].filepath; await fs.copyFile(tempPath, targetPath + file[1].originalFilename); await fs.rm(tempPath); }
而且对我来说很好用我认为问题在于我们无法直接从节点移动临时文件
5条答案
按热度按时间rdrgkggo1#
这听起来像是您试图跨“设备”(分区)边界重命名文件。
假设
/tmp
与/
是不同的分区,这意味着不允许这样做:(the显然,这同样适用于
fs.renameSync()
)如果你想这样做,你需要先将文件复制到新的位置,然后删除旧的文件,有一些模块,比如
mv
,可以帮助你。fumotvh32#
它用于Linux上的EXDEV:
请参见
man rename
手册页:EXDEV oldpath和newpath不在相同的挂载文件系统上。(Linux允许在多个点挂载文件系统,但rename()不能跨不同的挂载点工作,即使在两个挂载点上挂载了相同的文件系统。
Windows上存在
ERROR_NOT_SAME_DEVICE
时也会出现此错误,请参阅:有关详细信息,请参阅:
winerror.h 0x80070011
#define ERROR_NOT_SAME_DEVICE
系统无法将文件移动到其他磁盘驱动器。uelo1irk3#
我猜你是试图从
/temp
文件夹复制一个文件,因为形式。我解决了它复制,而不是重命名ybzsozfc4#
只是对于那些使用Linux的人来说,当你的旧路径
/tmp
和新路径在不同的分区或磁盘上时,就会发生这种情况。ve7v8dk25#
在本例中,我将代码从
转换为以下代码
而且对我来说很好用
我认为问题在于我们无法直接从节点移动临时文件