我无法在一个将近300GB的XML文件中获取行号。IXmlLineInfo.LineNumber是一个int32类型,当超过int.MaxValue时会返回一个负数。使用int或long都无法存储行号-已尝试使用两种类型。Xmlreader能够读取到eof。 使用.NET 2.0和最新版本也是使用int32类型。
public void ReadLines()
{
long readcounter = 0;
long linenumber = 0;
fname = "I:\\XML Files\\europe-latest.osm";
XmlReaderSettings settings = new XmlReaderSettings();
settings.ProhibitDtd = false;
settings.XmlResolver = null;
XmlReader reader = XmlReader.Create(fname, settings);
IXmlLineInfo lineInfo = ((IXmlLineInfo)reader);
try
{
while (reader.Read())
{
linenumber = lineInfo.LineNumber;
readcounter++;
if (readcounter % 1000000 == 0) Console.WriteLine(linenumber.ToString());
}
}
catch (XmlException ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}
finally
{
reader.Close();
Console.WriteLine(DateTime.Now.ToLongTimeString());
}
}