2017-01-24 7 views
0

Я обнаружил, что застрял в определенной проблеме. В настоящее время я пишу программу на C#, которая читает в .txts. Эти .txts постоянно меняются, так как в контент добавляется к ним.Запоминание последней позиции в TXT-файле на C#?

Я создал FileSystemWatcher, который передает имя файла методу, читаемому в моем txt. Теперь я хотел бы иметь что-то среднее между ними, которое запоминает последнюю позицию, которую я прочитал в txt, а затем только передает новую часть.

Он также должен помнить об этом при следующем запуске программы.

Я думал о сохранении последней строки в xml или txt, а затем позволяя моему методу искать этот файл для последней строки, отмеченной там.

Единственный похожий вопрос, который я нашел, это: Read log file from last read position. Однако я этого не понимаю.

В любом случае, как это сделать более эффективно или элегантно?

Редактировать: Я уже связал предложенный вопрос и нет, он не похож на мой. Я хочу постоянно хранить информацию о том, как далеко я попадал в .txt, а не только во время выполнения.

+0

Является ли ваша программа закрытия в период между чтения файла журнала? Если это не так, вам не нужно сохранять это значение в файл. – BenVlodgi

+0

«Словарь ' кажется разумным вариантом. Вы холодно используете нижний обведенный путь к файлу в качестве ключа и последней позиции чтения в качестве значения. – InBetween

+0

Это звучит как два независимых вопроса: 1) вы ищете способ прочитать только часть файла, учитывая известное смещение (stream.seek может это сделать) 2) вы хотите сохранить произвольное значение между перезапусками. (Есть десятки способов сделать это: Ini-file, registry, app.config, возможно, даже альтернативный поток данных NTFS) – HugoRune

ответ

1

Когда вам нужно хранить конечный объем информации о состоянии программы на платформе Windows между циклами выполнения, обычно используется Windows Registry. Вот вопрос stackoverflow, который покажет вам, как это сделать. Используйте HKEY_CURRENT_USER, так что у вас нет проблем/права администратора UAC:

Writing to registry in a C# application

-1

.NET 4.0

это поможет? Одним из способов может быть сохранение номера строки, а не сохранение содержимого последней строки.

С .NET 4.0 можно напрямую обращаться к одной строке файла. Например, чтобы получить доступ к линии 15:

string line = File.ReadLines(FileName).Skip(14).Take(1).First(); Это будет возвращать только линия требуется

+0

не уверен, почему меня проголосовали? –

+1

Этот код по-прежнему будет считывать первые 14 строк файла за кулисами, нет преимуществ по производительности по сравнению с чтением и отбрасыванием строк самостоятельно. Доступ к определенным частям файла возможен только, но не с этим синтаксисом, и вам нужно знать смещение байта, а не только номер строки. Например, Stream.seek будет работать. – HugoRune

+0

У тебя есть! Будут исследовать больше на stream.seek. Спасибо за объяснение. –

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

  • Нет связанных вопросов^_^