Синхронное чтение файла readSync
При попытке синхронного чтения построчно данные считываются неточно(при асинхронном чтении все нормально).
Примерный код
fs=require('fs');
var op=fs.openSync("new.txt","r+",777);
var pos=0; var line=[];
var rl=fs.readSync(op,100,pos);
line.push(rl[0]);
pos=pos+rl[1];
rl=fs.readSync(op,100,pos);
.....
fs.closeSync(op);
Суть проблемы: текст латинскими буквами считывается корректно всегда. Текст кириллицей считывается корректно когда скачиваешь файл в одну строку (Одна операция к примеру -readSync(op,10000,0)). При порционном чтении многострочного кириллического текста или (смешанного) возникают отдельные кракозябры в кириллическом тексте как раз в районе стыка "порций"-как я понимаю. Это баг или что то неверно делаю? |
Решение найдено - естественно надо все делать через буфер - иначе правильно склеить мультибайтные символы не получается
Код примерно такой (для порционного чтения без разбивки на строчки):
var buf=new Buffer(400,"utf8");
var op=fs.openSync("new.txt","r+",777);
var stripBom=require('strip-bom');
var rl=fs.readSync(op,buf,0,20,0);
var ofs=rl;
while (rl==20){
rl=fs.readSync(op,buf,ofs,20);
ofs+=rl;
}
var result=stripBom(buf.toString("utf8",0,ofs));
|
| Часовой пояс GMT +3, время: 10:17. |