有没有办法知道StreamReader使用了多少字节的流?
我有一个项目,我们需要读取一个文件,其中包含文本标题,后跟二进制数据的开头.我最初尝试阅读此文件是这样的:
private int _dataOffset;
void ReadHeader(string path)
{
using (FileStream stream = File.OpenRead(path))
{
StreamReader textReader = new StreamReader(stream);
do
{
string line = textReader.ReadLine();
handleHeaderLine(line);
} while(line != "DATA") // Yes, they used "DATA" to mark the end of the header
_dataOffset = stream.Position;
}
}
private byte[] ReadDataFrame(string path, int frameNum)
{
using (FileStream stream = File.OpenRead(path))
{
stream.Seek(_dataOffset + frameNum * cbFrame, SeekOrigin.Begin);
byte[] data = new byte[cbFrame];
stream.Read(data, 0, cbFrame);
return data;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我设置_dataOffset到stream.Position,我得到了StreamReader的已读,而不是头的末尾位置.我一想到它就有意义,但我仍然需要知道标题的结尾在哪里,我不确定是否有办法做到这一点并仍然利用StreamReader.
所以你的最后一行包含“DATA”+未知数量的数据字节。您可以通过对最后读取的行使用 IndexOf() 来提取位置。然后重新调整流的位置。
但我不确定在这种情况下是否应该使用 ReadLine() 。也许最好逐字节读取,直到到达“DATA”标记。