我有Filestream
,我正在阅读大文件。
分隔符为CRLF
,我想直到CRLF才能阅读。
如何使用Filestream执行此操作?
Filestream
是否是正确的选择?
我对readallLines
或类似的方法并不感兴趣,因为你必须将所有文件加载到内存中。
主要优先考虑的是内存效率。
答案 0 :(得分:1)
你发表评论会大大改变这个问题;所以你有一个打开 FileStream
,你想在其中找到下一个CRLF ('\r\n')
;在这种情况下,可以实现类似的东西:
private static long GetNextCRLFPosition(FileStream stream) {
try {
long savedPosition = fs.Position;
// ReadByte - we're working with binary file...
for (int item = fs.ReadByte(); item >= 0; item = fs.ReadByte()) {
if (item == '\r') {
item = fs.ReadByte();
if (item == '\n')
return fs.Position - 2;
else
fs.Seek(-1, SeekOrigin.Current);
}
}
return -1;
}
finally {
fs.Seek(savedPosition, SeekOrigin.Begin);
}
}
...
using (FileStream fs = new FileStream(@"C:\MyFile.Text", FileMode.Open)) {
...
// The next "\r\n" is in shift bytes
long shift = GetNextCRLFPosition(fs);
...
}