Я просмотрел XML-файл размером 2,8 ГБ для позиций (указатель) определенных тегов. Я использую метод Seek
для установки начальной точки в этом файле. Файл кодируется UTF-8. Так индексация так:Проблема с индексированным XML-файлом
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
на StreamReader.BaseStream
помещает указатель ранее в файл. Довольно странно.
Любые предложения?
С наилучшими пожеланиями, Ventus
Ну, это правда, в этом файле есть символы, отличные от ASCII. Тогда как правильно его проиндексировать? – Ventus
@Ventus: Вы можете называть 'Encoding.GetByteCount (строка)' и надеяться, что все будет синхронизироваться. Я не могу сразу думать о ситуациях, когда этого не произойдет. –
Кажется, теперь лучше. Я должен проверить это сейчас. Я могу это все еще иногда это не идеально, но я надеюсь, что все будет в порядке. – Ventus