我正在尝试在 Node.js 脚本中将文件从一个分区移动到另一个分区。当我使用时,fs.renameSync
我收到了Error: EXDEV, Cross-device link
. 我会复制它并删除原始文件,但我也没有看到复制文件的命令。如何才能做到这一点?
如何将文件 a 移动到 Node.js 中的不同分区或设备?
IT技术
javascript
node.js
rename
2021-03-06 01:00:50
5个回答
跨不同分区移动文件时,您需要复制和取消链接。试试这个,
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”编写的名为fs.extra的包。
你像这样使用它:
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()
@chandru 使用的相同内容删除原始文件。
导入module并将其保存到您的 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 module来为你处理它。您不必考虑它是否会在同一分区内移动。这是最快的解决方案,因为它使用最新的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');
})();
其它你可能感兴趣的问题