Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将文件移动到Node.js中的其他分区或设备?_Javascript_Node.js_Rename - Fatal编程技术网

Javascript 如何将文件移动到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

我试图在Node.js脚本中将文件从一个分区移动到另一个分区。当我使用
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');
})();