2009-08-04 2 views
1

, имеющий FileStream, который я прочитал с помощью StreamReader (это очень большой файл), как я могу установить позицию Seek FileStream на первое вхождение определенной подстроки, чтобы Я могу начать читать этот большой файл с определенной точки?C#: String.IndexOf to FileStream.Seek

Благодаря

ответ

6

Что в файле? Просто строки текста Юникода? Тогда у вас есть проблема.

Вы никогда не узнаете позицию начала строки, пока вы не прочтете все предыдущие строки хотя бы один раз. Если файл не закодирован в UTF-32, каждый символ может принимать переменное количество байтов для его представления. Каждая строка будет иметь переменную длину.

Лучшее, что вы можете сделать, это просканировать файл один раз, а затем отметить позиции начала строк в индексе.

-1

Посмотрите на this пример на MSDN

filestream=new FileStream(s.Substring(s.IndexOf("string"),s.Length),FileMode.Open,FileAccess.Read); 
+0

, что статья о блокировании части файла. Не знаете, как это связано с вопросом? ... –

+0

И я понятия не имею, что вы думаете, что делает конструктор FileStream. –

4

FileStream не может выполнить ваш поиск. Вам придется вручную его искать. Вероятно, вы захотите использовать эффективный алгоритм поиска строк, такой как Knuth Morris Pratt.

0

Если вы имеете в виду первый раз, когда вы читаете файл, тогда вам нужно будет прочитать информацию о позиции (конкретной строки). В следующий раз, если содержимое файла не изменяется, вы можете запомнить эту позицию (в некоторой переменной для использования в том же запуске программы), установить позицию потока и начать ее чтение.

Смежные вопросы