我有一个简单的函数来读取一个似乎间歇性工作的文件。如果你传入一个位置,它将从该位置读取,否则它将读取最后10240个字节。它大部分时间都有效,但有时它会像这样的unicode characeters一起返回。
我无法弄清楚为什么它有时会失败,但不是一直都会失败。
" \ u0000的\ u0000的\ u0000的\ u0000的\ u0010 |#\ u0000的\ u0000的\ u0000的\ u0000p = S / \ u0000的\ u0000l \ U0002 \ u0000的\ u0000的\ u0000的\ u0000的\ u0000的\ u0000的\ u0000的\ u0000的\ u0000的\ U0
var fs = require('fs');
LogReader.prototype.readFile = function(res, position) {
var path = this.logPath;
fs.stat(path, function(error, stats) {
fs.open(path, 'r', function(error, fd) {
var tell, bufferLength, buffer;
if (!!position) {
tell = parseInt(position, 10);
} else {
tell = stats.size - 10240;
}
bufferLength = stats.size - tell;
if (bufferLength === 0) {
res.json({
tell: tell,
content: ''
});
return;
}
buffer = new Buffer(bufferLength);
try {
fs.read(fd, buffer, 0, bufferLength, tell, function(error, bytesRead, buffer) {
var data = buffer.toString('utf8', 0, buffer.length);
res.json({
tell: stats.size,
content: data.replace(/\r\n/g, '\n')
});
});
}
catch(err) {
// do nothing
}
finally {
fs.close(fd);
}
});
});
};