Я пытаюсь переместить файл из одного раздела в другой в Node.js script. Когда я использовал fs.renameSync
, я получил Error: EXDEV, Cross-device link
. Я бы скопировал его и удалю оригинал, но я также не вижу команды для копирования файлов. Как это можно сделать?
Как перенести файл a на другой раздел или устройство в Node.js?
Ответ 1
Вам нужно скопировать и отменить связь при перемещении файлов по разным разделам. Попробуйте это,
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');
});
*/
Ответ 2
Еще одно решение проблемы.
Там пакет под названием 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.
Ответ 3
Я знаю, что это уже ответили, но я столкнулся с подобной проблемой и получил что-то вроде:
require('child_process').spawn('cp', ['-r', source, destination])
Это означает, что вы вызываете команду cp
( "copy" ). Поскольку мы выходим за пределы Node.js, эта команда должна поддерживаться вашей системой.
Я знаю, что это не самый элегантный, но он сделал то, что мне нужно:)
Ответ 4
чтобы импортировать модуль и сохранить его в файле 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');
});
Ответ 5
Я создал модуль 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');
})();