我正在尝试在Node.js脚本中将文件从一个分区移动到另一个分区。当我使用fs.renameSync
时,我收到了Error: EXDEV, Cross-device link
错误。我可以将其复制并删除原始文件,但我没有看到复制文件的命令。如何完成这个任务?
我正在尝试在Node.js脚本中将文件从一个分区移动到另一个分区。当我使用fs.renameSync
时,我收到了Error: EXDEV, Cross-device link
错误。我可以将其复制并删除原始文件,但我没有看到复制文件的命令。如何完成这个任务?
在不同分区之间移动文件时,您需要进行复制和取消链接。 请尝试以下操作:
var fs = require('fs');
//var util = require('util');
var is = fs.createReadStream('source_file');
var os = fs.createWriteStream('destination_file');
is.pipe(os);
is.on('end',function() {
fs.unlinkSync('source_file');
});
/* node.js 0.6 and earlier you can use util.pump:
util.pump(is, os, function() {
fs.unlinkSync('source_file');
});
*/
解决问题的另一个方法。
有一个名为fs.extra的包,由npm上的“coolaj86”编写。
使用以下命令安装:
npm install fs.extra
fs = require ('fs.extra');
fs.move ('foo.txt', 'bar.txt', function (err) {
if (err) { throw err; }
console.log ("Moved 'foo.txt' to 'bar.txt'");
});
fs.rename()
,如果失败,则使用相同的util.pump()
进行复制并删除原始文件。我知道这个问题已经有答案了,但是我遇到了类似的问题,最终得到了以下解决方案:
require('child_process').spawn('cp', ['-r', source, destination])
此操作调用命令cp
("copy"),因为我们要跳出Node.js环境,所以需要您的系统支持此命令。
我知道这不是最优雅的解决方案,但它满足了我的需求 :)
导入模块并将其保存到您的package.json文件中
npm install mv --save
var mv = require('mv');
mv('source_file', 'destination_file', function (err) {
if (err) {
throw err;
}
console.log('file moved successfully');
});
fs.copyFile()
Node.js API将文件复制到不同的分区/磁盘时进行移动。
只需安装move-file
即可:$ npm install move-file
const moveFile = require('move-file');
(async () => {
await moveFile(fromPath, toPath);
console.log('File moved');
})();
end
事件而不是输出流。所以:is.pipe(os)
和is.on('end', function(){});
起作用了。 - Barış Uşaklıfs.unlinkSync
而不是fs.unlink
? - EaterOfCode