【问题标题】:What does the "EXDEV: cross-device link not permitted" error mean?“EXDEV:不允许跨设备链接”错误是什么意思?
【发布时间】:2017-08-29 14:13:38
【问题描述】:

这个错误实际上是什么意思?什么是“跨设备链接”?

this libuv page 上提到了它,但除了“不允许跨设备链接”之外,它没有提供任何细节。

【问题讨论】:

    标签: node.js libuv


    【解决方案1】:

    听起来您正在尝试跨“设备”(分区)边界重命名文件。

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

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

    (显然,fs.renameSync() 也是如此)

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

    【讨论】:

    • 在文件系统模块中使用 copyFileunlink 的组合也应该可以解决问题。
    • @AmirSyafrudin 是的,但fs.copyFile 在我写这个答案时并不存在:D
    • 确实如此。只是想添加它,以防像我这样的新手偶然发现您的答案。 :)
    • 这里解决方案的代码示例:stackoverflow.com/a/44146825/5701
    • @SeanO 附加说明它首先将整个文件读入内存
    【解决方案2】:

    它用于Linux上的EXDEV:

    参见man rename 联机帮助页:

    EXDEV oldpath 和 newpath 不在同一个挂载的文件系统上。 (Linux 允许在多个点挂载文件系统, 但是 rename() 不能跨不同的挂载点工作,即使 如果两个都挂载了相同的文件系统。)

    Windows上有ERROR_NOT_SAME_DEVICE时也会出现这个错误,见:

    更多信息见:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-09
          • 2013-12-29
          • 1970-01-01
          • 2010-10-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多