Das Projekt, an dem ich arbeite (Node.js) impliziert viele Operationen mit dem Dateisystem (Kopieren, Lesen, Schreiben, etc.).
Welche Methoden sind die schnellsten?
Das Projekt, an dem ich arbeite (Node.js) impliziert viele Operationen mit dem Dateisystem (Kopieren, Lesen, Schreiben, etc.).
Welche Methoden sind die schnellsten?
Für schnelle Kopien sollten Sie die fs.constants.COPYFILE_FICLONE
Flagge. Es erlaubt (bei Dateisystemen, die dies unterstützen), den Inhalt der Datei nicht wirklich zu kopieren. Es wird lediglich ein neuer Dateieintrag erstellt, der jedoch auf eine Copy-on-Write "Klon" der Quelldatei.
Nichts/weniger zu tun ist der schnellste Weg, etwas zu tun ;)
https://nodejs.org/api/fs.html#fs_fs_copyfile_src_dest_flags_callback
let fs = require("fs");
fs.copyFile(
"source.txt",
"destination.txt",
fs.constants.COPYFILE_FICLONE,
(err) => {
if (err) {
// TODO: handle error
console.log("error");
}
console.log("success");
}
);
Stattdessen Versprechen verwenden:
let fs = require("fs");
let util = require("util");
let copyFile = util.promisify(fs.copyFile);
copyFile(
"source.txt",
"destination.txt",
fs.constants.COPYFILE_FICLONE
)
.catch(() => console.log("error"))
.then(() => console.log("success"));
Verwenden Sie die integrierte Kopierfunktion von Node.js
Es bietet sowohl eine asynchrone als auch eine synchrone Version:
const fs = require('fs');
// File "destination.txt" will be created or overwritten by default.
fs.copyFile('source.txt', 'destination.txt', (err) => {
if (err)
throw err;
console.log('source.txt was copied to destination.txt');
});
Sie können dies mit der Option fs-extra
Modul sehr leicht:
const fse = require('fs-extra');
let srcDir = 'path/to/file';
let destDir = 'pat/to/destination/directory';
fse.moveSync(srcDir, destDir, function (err) {
// To move a file permanently from a directory
if (err) {
console.error(err);
} else {
console.log("success!");
}
});
Oder
fse.copySync(srcDir, destDir, function (err) {
// To copy a file from a directory
if (err) {
console.error(err);
} else {
console.log("success!");
}
});
Ich habe ein kleines Dienstprogramm geschrieben, um die verschiedenen Methoden zu testen:
https://www.npmjs.com/package/copy-speed-test
führen Sie es mit
npx copy-speed-test --source someFile.zip --destination someNonExistentFolder
Es führt eine native Kopie mit child_process.exec() durch, eine Dateikopie mit fs.copyFile und es verwendet createReadStream mit einer Vielzahl von verschiedenen Puffergrößen (Sie können die Puffergrößen ändern, indem Sie sie auf der Kommandozeile übergeben. führen Sie npx copy-speed-test -h für weitere Informationen aus).
Mikes Lösung sondern mit Versprechungen:
const FileSystem = require('fs');
exports.copyFile = function copyFile(source, target) {
return new Promise((resolve,reject) => {
const rd = FileSystem.createReadStream(source);
rd.on('error', err => reject(err));
const wr = FileSystem.createWriteStream(target);
wr.on('error', err => reject(err));
wr.on('close', () => resolve());
rd.pipe(wr);
});
};
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.