鍍金池/ 問答/C#  HTML/ 使用fs.renameSync()報錯 “ cross-device link

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

跟打代碼學(xué)習(xí)NodeJS教程,在使用fs.renameSync()方法時報錯:
EXDEV: cross-device link not permitted

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

以下是代碼截圖:

圖片描述

以下是報錯截圖:
圖片描述

我推測的可能:
① windows系統(tǒng)與NodeJS/fs沖突
② fs.renameSync方法需要其他參數(shù)或者邏輯或者條件
③ 原先在/tmp/下有一個test.png,可能會起沖突?(這個問題不可能、我已經(jīng)改了那個文件的文件名了)

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

回答
編輯回答
蔚藍(lán)色

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

2018年1月14日 07:45
編輯回答
離人歸

自問自答:(經(jīng)過進(jìn)一步研究、查閱相關(guān)的博客.資料,整理了一下)

首先,fs.renameSync()方法不能跨磁盤操作。也就是說在Windows環(huán)境中,確實會遇到如本問題提到的報錯:
EXDEV: cross-device link not permitted

然后,查到并親測有效的解決方案:


方案一:(“臨時路徑”法)
創(chuàng)建form實例(new formidable.IncomingForm())后,form.uploadDir = "tmp",
再用 fs.renameSync() 即可解決。

方案二:(createReadStream + createWriteStream + unlinkSync法)
創(chuàng)建form實例(new formidable.IncomingForm())后,不再進(jìn)行 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);
});
2017年5月13日 15:36