StreamReader消耗的字节数

Jon*_*ton 8 .net c#

有没有办法知道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)

问题是,当我设置_dataOffsetstream.Position,我得到了StreamReader的已读,而不是头的末尾位置.我一想到它就有意义,但我仍然需要知道标题的结尾在哪里,我不确定是否有办法做到这一点并仍然利用StreamReader.

tan*_*ius 0

所以你的最后一行包含“DATA”+未知数量的数据字节。您可以通过对最后读取的行使用 IndexOf() 来提取位置。然后重新调整流的位置。

但我不确定在这种情况下是否应该使用 ReadLine() 。也许最好逐字节读取,直到到达“DATA”标记。