文件流和 CRLF 分隔符?
Filestream and CRLF delimiter?
我有一个 Filestream
,我正在阅读一个 大 文件。
分隔符是CRLF
,我只想读到CRLF。
如何使用 Filestream 做到这一点?
Filestream
是正确的选择吗?
我对 readallLines
或类似的方法不感兴趣,您必须将所有文件加载到内存中。
主要优先考虑的是内存效率。
您的评论极大地改变了问题;所以你有一个 open 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);
...
}
我有一个 Filestream
,我正在阅读一个 大 文件。
分隔符是CRLF
,我只想读到CRLF。
如何使用 Filestream 做到这一点?
Filestream
是正确的选择吗?
我对 readallLines
或类似的方法不感兴趣,您必须将所有文件加载到内存中。
主要优先考虑的是内存效率。
您的评论极大地改变了问题;所以你有一个 open 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);
...
}