Как переместить файл a в другой раздел или устройство в Node.js? - PullRequest
30 голосов
/ 31 декабря 2010

Я пытаюсь переместить файл из одного раздела в другой в скрипте Node.js.Когда я использовал fs.renameSync, я получил Error: EXDEV, Cross-device link.Я скопировал бы это и удалил оригинал, но я не вижу команды, чтобы скопировать файлы также.Как это можно сделать?

Ответы [ 5 ]

51 голосов
/ 31 декабря 2010

Вам необходимо копировать и отменять связь при перемещении файлов между различными разделами.Попробуйте это,

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');
});
*/
7 голосов
/ 27 мая 2013

Еще одно решение проблемы.

Существует пакет под названием fs.extra , написанный "coolaj86" на npm.

Вы используете это так: 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.

6 голосов
/ 15 марта 2011

Я знаю, что на этот вопрос уже есть ответ, но я столкнулся с подобной проблемой и в результате получил что-то вроде:

require('child_process').spawn('cp', ['-r', source, destination])

Это называется командой cp («копировать»). Поскольку мы вышли за пределы Node.js, эта система должна поддерживаться вашей системой.

Я знаю, что это не самый элегантный, но он сделал то, что мне было нужно:)

4 голосов
/ 26 марта 2015

, чтобы импортировать модуль и сохранить его в файле 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');
});
2 голосов
/ 20 ноября 2017

Я создал модуль Node.js, который просто обрабатывает его для вас. Вам не нужно думать о том, будет ли он перемещен в пределах одного раздела или нет. Это самое быстрое из доступных решений, поскольку оно использует недавний API fs.copyFile() Node.js для копирования файла при перемещении на другой раздел / диск.

Просто установите move-file:

$ npm install move-file

Тогда используйте это так:

const moveFile = require('move-file');

(async () => {
    await moveFile(fromPath, toPath);
    console.log('File moved');
})();
...