我扫描了 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/