2010-12-31 6 views

Odpowiedz

51

Należy skopiować i odłączyć podczas przenoszenia plików między różnymi partycjami. Spróbuj tego,

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'); 
}); 
*/ 
+0

I, w przeciwieństwie do innych rozwiązań, czyści katalog źródłowy. –

+1

Czy to nie jest bardzo wymagające zasoby? – Thomaschaaf

+7

util.pump jest przestarzałe. użyj is.pipe (os), a następnie posłuchaj zdarzenia "end" w strumieniu wyjściowym. – andrewrk

6

wiem, że to jest już odpowiedział, ale natknąłem się na podobny problem i skończyło się coś wzdłuż linii:

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

Co to robi to wywołać polecenie cp ("Kopiuj"). Ponieważ wychodzimy poza Node.js, to polecenie musi być obsługiwane przez twój system.

wiem, że nie jest to najbardziej elegancki, ale to nie to, co potrzebne :)

+0

To jest w porządku, jeśli nie musisz obsługiwać systemu Windows – Lloyd

+4

@Lloyd, więc wszystko jest w porządku: D – ruX

7

One bardziej rozwiązania problemu.

Istnieje pakiet o nazwie fs.extra napisany przez "coolaj86" na npm.

go używać tak: 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'"); 
}); 

Czytałem kod źródłowy dla tej rzeczy. Podejmuje próbę utworzenia standardu fs.rename(), a jeśli się nie powiedzie, wykona kopię i usunie oryginał za pomocą tego samego, którego używa @chandru.

+0

Przy okazji rozmawiałem z coolaj86 na github i jest on świadomy tego, że używa.Funkcja pump() jest przestarzała w węźle 0.10 i wkrótce ją naprawi. – erapert

+0

Autorem pakietu fs-extra jest jprichardson, a coolaj86 jest kontrybutorem (więcej: https://github.com/jprichardson/node-fs-extra). – davidbourguignon

4

zaimportować moduł i zapisać go do pliku package.json

npm install mv --save 

następnie używać go tak:

var mv = require('mv'); 

mv('source_file', 'destination_file', function (err) { 
    if (err) { 
     throw err; 
    } 
    console.log('file moved successfully'); 
}); 
+0

nie jest to odpowiedni zamiennik dla fs.renameSync, ponieważ nie jest synchroniczny. https://github.com/andrewrk/node-mv/issues/9 – Michael

2

Zrobiłem moduł node.js że tylko obsługuje go dla Ciebie . Nie musisz się zastanawiać, czy zostanie przeniesiony na tę samą partycję, czy nie. Jest to najszybsze dostępne rozwiązanie, ponieważ korzysta z najnowszego interfejsu API Node.js fs.copyFile(), aby skopiować plik podczas przenoszenia do innej partycji/dysku.

Wystarczy zainstalować move-file:

$ npm install move-file 

następnie używać go tak:

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

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