Я написал следующий код, чтобы создать хэш файла:Почему функция FileStream не заканчивается
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;
}
}
Это работало нормально, пока я не бросил несколько файлов меньшего размера на него. Когда я это сделал, функция просто зависала. Обратный вызов filestream.on('end')
никогда не произойдет.
я переписал его не использовать createReadStream:
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;
}
}
Этот код работает просто отлично, за исключением того, что это невероятно медленно на файлы, которые несколько мегабайт или больше.
Мой вопрос: почему первая функция не работает на небольших файлах?
Вы пытались настроить событие перед вызовом трубки? Просто идея, я действительно не знаю, что происходит. – Havenard