【发布时间】:2009-04-10 11:56:28
【问题描述】:
有没有办法知道 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;
}
问题是当我将_dataOffset 设置为stream.Position 时,我得到了StreamReader 已读取到的位置,而不是标题的末尾。我一想到这是有道理的,但我仍然需要能够知道标头的结尾在哪里,而且我不确定是否有办法做到这一点并且仍然可以利用 StreamReader。
【问题讨论】: