c# - 索引 XML 文件的问题

标签 c# xml

我扫描了 2.8GB 的​​ XML 文件以查找特定标签的位置(索引)。我使用 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 上的 Seek 方法仍然将指针放在文件的前面。很奇怪。

有什么建议吗?

最好的问候, 文图斯

最佳答案

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

我的猜测是您的文件中有非 ASCII 字符 - 这些字符将占用超过一个字节。

我认为字节顺序标记可能也存在潜在问题,如果有的话。我不记得 StreamReader 是否会自动吞下它 - 这会让你开始 3 个字节。

关于c# - 索引 XML 文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3335154/

相关文章:

c# - HtmlAgilityPack 和身份验证

javascript - C# json解析格式

java - 使用 Camel 提取文件名中的值

php - 从xml文件中检索后,将数据插入不同行的mysql php

c# - 使用 ReSharper 将方法提取到现有接口(interface)

c# - 反序列化时如何忽略下划线

c# - 使用 C# 和 MS Access SQL 创建表

sql-server - 如何将超过 8000 个字符的 XML 字段转换为字符串?

xml - VB.NET 根据 XSD 文件验证 XML 文件并通过 xml 进行解析

javascript - 实体名称必须紧跟实体引用中的 '&'