代码之家  ›  专栏  ›  技术社区  ›  Ventus

索引XML文件有问题

  •  2
  • Ventus  · 技术社区  · 14 年前

    Seek 方法在该文件中设置起点。文件是UTF-8编码的。

    
    using(StreamReader sr = new StreamReader(pathToFile)){
      long index = 0;
      while(!sr.EndOfStream){
        string line = sr.ReadLine();
        index += (line.Length + 2); //remeber of \r\n chars
    
        if(LineHasTag(line)){
          SaveIndex(index-line.Length); //need beginning of the line
        }
      }
    }
    

    所以后来我在另一个文件索引的位置。但当我使用seek时,它似乎并不好,因为位置比它应该的位置早了一点。 我已将该文件的一些内容加载到char数组中,并手动检查了所需标记的良好索引。它和我上面的代码索引的一样。但仍然 StreamReader.BaseStream 将指针放在文件的前面。很奇怪。

    有什么建议吗?

    顺致敬意, 文图斯

    1 回复  |  直到 14 年前
        1
  •  2
  •   Jon Skeet    14 年前

    以字节为单位寻找交易—假设每个字符有一个字节。在UTF-8中,BMP中的一个字符最多可以占用三个字节。

    我猜您的文件中有非ASCII字符—这些字符将占用一个以上的字节。

    可以 StreamReader 会自动吞下去-这会让你从3个字节开始。