Я пишу модуль для Nodejs и столкнулся с серьёзной проблемой!
Вот код:
const fs = require('fs');
let fd = null;
let pos = 0;
function open(fname) {
if(!fs.existsSync(fname))
return false;
fd = fs.openSync(fname, 'r');
return true;
}
function close() {
if(!fd)
return false;
fd = null;
return true;
}
function nextLine() {
let buf = Buffer.allocUnsafe(50);
let str = "";
while(true) {
let len = fs.readSync(fd, buf, 0, 50, pos);
if(len === 0 && str.length === 0)
return null;
if(len === 0)
break;
for(let k=0; k<len; k++) {
//console.log('buf['+k+']='+buf[k]);
if(buf[k] == 10) {
pos += k;
console.log(buf.toString().substr(0, k+1))
str+=buf.toString().substr(0, k+1);
break;
}
}
pos+=len;
str+=buf.toString().substr(0, len);
}
return str;
}
module.exports = {
open: open,
close: close,
nextLine: nextLine
}
Вот так можно проверить:
var f = require('./module');
console.log(f.open('./f'));
console.log(f.nextLine());
console.log(f.close());
Когда я выполняю этот код я вижу вот такой странный вывод:
true
A
A
A
true
Текст файла f:
A
То есть вывод в функции совсем другой чем тот который конкатенируется с str!! Я тысячу раз проверил и проблема не в коде, что делать?