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?
Verwenden Sie den standardmäßig eingebauten Weg fs.copyFile
:
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');
});
Wenn Sie alte End-of-Life-Versionen von Node.js unterstützen müssen - hier ist, wie Sie es in Versionen tun, die nicht unterstützen fs.copyFile
:
const fs = require('fs');
fs.createReadStream('test.log').pipe(fs.createWriteStream('newLog.log'));
Derselbe Mechanismus, aber mit zusätzlicher Fehlerbehandlung:
function copyFile(source, target, cb) {
var cbCalled = false;
var rd = fs.createReadStream(source);
rd.on("error", function(err) {
done(err);
});
var wr = fs.createWriteStream(target);
wr.on("error", function(err) {
done(err);
});
wr.on("close", function(ex) {
done();
});
rd.pipe(wr);
function done(err) {
if (!cbCalled) {
cb(err);
cbCalled = true;
}
}
}
Seit Node.js 8.5.0 haben wir die neue fs.copyFile y fs.copyFileSync Methoden.
Beispiel für die Verwendung:
var 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');
});
Ich war nicht in der Lage, die createReadStream/createWriteStream
Methode funktioniert aus irgendeinem Grund, aber die Verwendung der fs-extra npm-Modul funktionierte es auf Anhieb. Ich bin mir allerdings nicht sicher, wie groß der Leistungsunterschied ist.
npm install --save fs-extra
var fs = require('fs-extra');
fs.copySync(path.resolve(__dirname, './init/xxx.json'), 'xxx.json');
Schnell zu schreiben und bequem zu benutzen, mit Versprechungen und Fehlermanagement:
function copyFile(source, target) {
var rd = fs.createReadStream(source);
var wr = fs.createWriteStream(target);
return new Promise(function(resolve, reject) {
rd.on('error', reject);
wr.on('error', reject);
wr.on('finish', resolve);
rd.pipe(wr);
}).catch(function(error) {
rd.destroy();
wr.end();
throw error;
});
}
Dasselbe gilt für die async/await-Syntax:
async function copyFile(source, target) {
var rd = fs.createReadStream(source);
var wr = fs.createWriteStream(target);
try {
return await new Promise(function(resolve, reject) {
rd.on('error', reject);
wr.on('error', reject);
wr.on('finish', resolve);
rd.pipe(wr);
});
} catch (error) {
rd.destroy();
wr.end();
throw error;
}
}
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.