Javascript 如何将文件移动到Node.js中的其他分区或设备?
我试图在Node.js脚本中将文件从一个分区移动到另一个分区。当我使用Javascript 如何将文件移动到Node.js中的其他分区或设备?,javascript,node.js,rename,Javascript,Node.js,Rename,我试图在Node.js脚本中将文件从一个分区移动到另一个分区。当我使用fs.renameSync时,我收到了错误:EXDEV,跨设备链接。我会复制它并删除原始文件,但我也看不到复制文件的命令。如何做到这一点?在不同分区之间移动文件时,需要复制和取消链接。试试这个 var fs = require('fs'); //var util = require('util'); var is = fs.createReadStream('source_file'); var os = fs.create
fs.renameSync
时,我收到了错误:EXDEV,跨设备链接
。我会复制它并删除原始文件,但我也看不到复制文件的命令。如何做到这一点?在不同分区之间移动文件时,需要复制和取消链接。试试这个
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');
});
*/
我知道这个问题已经得到了回答,但我遇到了一个类似的问题,最终得到了如下结论:
require('child_process').spawn('cp', ['-r', source, destination])
它的作用是调用命令cp
(“复制”)。由于我们是在Node.js之外执行的,因此您的系统需要支持此命令
我知道这不是最优雅的,但它满足了我的需要:)这个问题还有一个解决方案 npm上有一个名为“coolaj86”的包 你这样使用它:
npm安装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()
,如果失败,则使用@chandru使用的相同util.pump()
进行复制并删除原始模块。导入模块并将其保存到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');
});
我制作了一个Node.js模块,只为您处理它。您不必考虑它是否将在同一分区内移动。这是可用的最快的解决方案,因为它使用最新的
fs.copyFile()
Node.js API在移动到其他分区/磁盘时复制文件
只需安装:
然后像这样使用它:
const moveFile = require('move-file');
(async () => {
await moveFile(fromPath, toPath);
console.log('File moved');
})();
而且,与其他解决方案不同,它会清理源目录。这不是非常占用资源吗?util.pump已被弃用。使用is.pipe(os),然后侦听输出流上的“end”事件。对我来说,发送
end
事件的是输入流,而不是输出流。所以:is.pipe(os)
和is.on('end',function(){})代码>工作。为什么使用fs.unlinkSync
而不是fs.unlink
?如果不需要支持Windows@Lloyd所以总是很好:顺便说一句,我在github上和coolaj86谈过,他知道util.pump()已在节点0.10中弃用,并将很快修复此问题。fs extra软件包的作者是jprichardson,coolaj86是一名贡献者(有关详细信息,请参阅)。这不适合替代fs.renameSync,因为它不同步。
const moveFile = require('move-file');
(async () => {
await moveFile(fromPath, toPath);
console.log('File moved');
})();