如何将文件a移动到Node.js中的其他分区或设备?

30 javascript rename node.js

我正在尝试在Node.js脚本中将文件从一个分区移动到另一个分区.我用的时候fs.renameSync收到了Error: EXDEV, Cross-device link.我将其复制并删除原始文件,但我也没有看到复制文件的命令.如何才能做到这一点?

Cha*_*kar 51

在跨不同分区移动文件时,您需要复制和取消链接.试试这个,

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');
});
*/
Run Code Online (Sandbox Code Playgroud)

  • util.pump已弃用.使用is.pipe(os)然后在输出流上侦听'end'事件. (7认同)
  • 为什么使用`fs.unlinkSync`而不使用`fs.unlink`? (2认同)

era*_*ert 7

该问题的另一个解决方案.

在npm上有一个名为fs.extra的包,由"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'");
});
Run Code Online (Sandbox Code Playgroud)

我已经阅读了这个东西的源代码.它试图做一个标准fs.rename()然后,如果失败,它会复制并使用util.pump()@chandru使用的相同删除原文.


Jus*_*tin 6

我知道这已经得到了解答,但我遇到了类似的问题,并最终得到了以下内容:

require('child_process').spawn('cp', ['-r', source, destination])
Run Code Online (Sandbox Code Playgroud)

这样做是调用命令cp("复制").由于我们正在走出Node.js,因此系统需要支持此命令.

我知道它不是最优雅的,但它做了我需要的:)

  • @Lloyd总是如此:D (4认同)