Ich schrieb den folgenden Code ein Hash einer Datei zu erstellen:Warum wird die Filestream-Funktion am Ende nicht
function hashFile(filePath){
try{
// Setup hash
var hash = crypto.createHash('sha256');
hash.setEncoding('hex');
// Setup filestream
var fileStream = fs.createReadStream(filePath);
fileStream.pipe(hash, { end: false });
fileStream.on('end', function() {
// Get the hash
hash.end();
var thisHash = String(hash.read());
});
}catch (err) {
console.log("Error thrown : " + err);
return;
}
}
Dies funktionierte gut, bis ich einige kleinere Dateien auf sie warf. Wenn ich das tat, würde die Funktion einfach hängen. Der Rückruf filestream.on('end')
würde niemals passieren.
Ich schrieb es nicht createReadStream verwenden:
function hashFile(filePath){
try{
fs.readFile(filePath, function (err, data) {
// Make the hash
var thisHash = crypto
.createHash('sha256')
.update(data, 'utf8')
.digest('hex');
console.log(thisHash);
});
}catch (err) {
console.log("Error: " + err);
return;
}
}
Dieser Code funktioniert gut, außer es auf Dateien, die ein paar MB oder größer unglaublich langsam ist sind.
Meine Frage ist, warum funktioniert die erste Funktion nicht auf kleinen Dateien?
Haben Sie versucht, das Ereignis vor dem Aufruf der Pipe einzurichten? Nur eine Idee, ich weiß nicht wirklich was los ist. – Havenard