Как я должен читать данные из текстового файла, используя .NET, с TWIST! - PullRequest
0 голосов
/ 20 сентября 2010

Да, это может звучать как вопрос новичка, но есть ТВИСТ!( И я уже сделал SO поиск ...)

Я пытаюсь прочитать несколько файлов, по одному за раз ... в то время как каждый файл, возможно, становится новымданные ДОБАВЛЕНЫ до конца.

Я всегда знаю последнюю позицию символа, в которой я был в последний раз.

Так что, когда я добираюсь до файла, я думаю Я хочучитать из начальной позиции в текущую конечную позицию во время выполнения строки кода ?

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

У меня около 300-400 файлов для разбора .. именно поэтому я не особенно хочу делать дерьмовую загрузку потоков, и каждый поток имеет свое собственное соединение с БД и т. Д. Независимо от т. Д. И т. Д.

Наконец, новые данные неЭто много, в секунду.так что не похоже, что я никогда не «догоню».

Итак ... есть идеи, как лучше всего это сделать?

Я также разбирал каждую «строку»… где строканемного текста, оканчивающегося на '\ n' и т. д.

Мысли?

Обновления / Редакции ..

  • Не беспокойтесь о том, что яЯ получил много файлов и хочу сохранить данные в базе данных.Причина, по которой я это предположил, заключалась в том, что люди не стали предлагать использовать несколько потоков для каждого файла, средства просмотра файлов и т. Д. *
  • Каждый файл журнала имеет одинаковую структуру и т. Д., Только разные данные / содержимое.И нет, я не хочу определять, когда они были обновлены .Я просто хочу проанализировать каждый из них, от последней позиции потока до текущей конечной позиции.

1 Ответ

0 голосов
/ 20 сентября 2010

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

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

...