streamreader使用mono的基本流位置

时间:2015-02-22 12:34:06

标签: c# linux mono streamreader

我正在尝试编写一些简单的代码来索引一些维基百科xml页面。我们的想法是通过使用streamreader读取一个字符来获取每个字符的字节偏移量,然后从字节流中保存位置,以便稍后我可以回到该位置。

使用一个简短的测试文件,其中包含"感\ na \ nb" (8字节)每个字符后面都有新行。然后我尝试在main函数中使用此代码:

using System;
using System.IO;

namespace indexer

{
    class MainClass
    {
        public static void Main(string[] args)
        {
            StreamReader sr = new StreamReader (@"/home/chris/Documents/len.txt");

            Console.Out.WriteLine(" length of file is " + sr.BaseStream.Length + " bytes ");
            sr.Read (); // read first byte. 
            Console.Out.WriteLine(" current position is  " + sr.BaseStream.Position);

            sr.Close ();
        }
    }
}

这给出了输出:

length of file is 8 bytes 
current position is  8

位置应为3,因为它应该只读取第一个字符。如果我再次使用sr.Read(),我会正确获得下一个字符,但该位置仍为8。

我误解了这应该如何工作,还是我发现了某种错误?

谢谢。

1 个答案:

答案 0 :(得分:1)

不,这不是一个错误。当您致电StreamReader时,StremReader.Read()会使用1 KB缓冲区填充。

您应该调用Encoding.GetByteCount()方法来获取字符中的字节数或正在读取的字符串。目前的编码可以在StreamReader.CurrentEncoding

中找到