我正在尝试使用Node.js脚本将文件从一个分区移动到另一个分区。当我使用fs.renameSync时,我收到了Error: EXDEV, Cross-device link。我会复制它并删除原始文件,但我也没有看到复制文件的命令。如何做到这一点?
发布于 2011-01-01 01:18:37
在不同分区之间移动文件时,您需要复制和取消链接。尝尝这个,
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');
});
*/发布于 2011-03-15 08:01:17
我知道这个问题已经得到了回答,但我遇到了类似的问题,最终得到了类似的结果:
require('child_process').spawn('cp', ['-r', source, destination])这样做的目的是调用命令cp ("copy")。由于我们脱离了Node.js,因此您的系统需要支持此命令。
我知道它不是最优雅的,但它做到了我需要的:)
发布于 2013-05-27 06:40:24
问题的另一个解决方案。
在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(),然后,如果失败,它会执行复制并使用@chandru使用的相同util.pump()删除原始文件。
https://stackoverflow.com/questions/4568689
复制相似问题