使用fs.renameSync()报错 “ cross-device link not permitted ”,是何原因?

跟打代码学习NodeJS教程,在使用fs.renameSync()方法时报错:
EXDEV: cross-device link not permitted

(教程:http://blog.csdn.net/binyao02...

以下是代码截图:

图片描述

以下是报错截图:
图片描述

我推测的可能:
① windows系统与NodeJS/fs冲突
② fs.renameSync方法需要其他参数或者逻辑或者条件
③ 原先在/tmp/下有一个test.png,可能会起冲突?(这个问题不可能、我已经改了那个文件的文件名了)

百思不得其解.......

阅读 3.4k
2 个回答

自问自答:(经过进一步研究、查阅相关的博客.资料,整理了一下)

首先,fs.renameSync()方法不能跨磁盘操作。也就是说在Windows环境中,确实会遇到如本问题提到的报错:
EXDEV: cross-device link not permitted

然后,查到并亲测有效的解决方案:


方案一:(“临时路径”法)
创建form实例(new formidable.IncomingForm())后,form.uploadDir = "tmp",
再用 fs.renameSync() 即可解决。

方案二:(createReadStream + createWriteStream + unlinkSync法)
创建form实例(new formidable.IncomingForm())后,不再进行 fs.renameSync() ,改由:

var readStream = fs.createReadStream(files.upload.path);
var writeStream = fs.createWriteStream("./tmp/test.png");
readStream.pip(writeStream);
readStream.on("end", function(){
    fs.unlinkSync(files.upload.path);
});

fs.rename(Sync)不能跨磁盘操作

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题