![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Не уверен, что угадал с веткой. Задача: прочитать с конца файл, найти данные - уйти. Все хорошо, но в какой то момент файл читается не с конца. такое ощущение, что достигнут максимум fstr.count.
Код:
fs:=TFileStream.Create(fn,fmShareDenyNone);
fs.Position:=0;
fstr:=TStringList.Create;
Fstr.LoadFromStream(fs,TEncoding.Default);
fs.Free;
//ShowMessage(IntToStr(fstr.Count));
for I := fstr.Count-1 downto 0 do
begin
Line:=fstr[i];В момент ошибки Fstr.count= 7115 всего-то. сам файл в это время 140к строк |
|
#2
|
||||
|
||||
|
Почему считать файл с конца нужно? Файл постоянно дописывается другим приложением? Или же файл переоткрывается на чтение при его изменении?
А это как? Цитата:
|
|
#3
|
|||
|
|||
|
Потому что файл - это лог с однотипными данными. Его пишет сторонняя программа. меня интересуют последние данные (конец файла). видимых ошибок доступа нет. Просто в какой-то момент возвращается не тот каунтер. И что с файлом не делай, каунтер как замерз. (всегда разный) Вчера кстати работало стабильно, никаких изменений вроде не вносил, чудо.
Если есть другой способ читать с конца, буду рад увидеть Последний раз редактировалось nixon232, 05.04.2016 в 12:51. |
|
#4
|
||||
|
||||
|
Размышления:
Цитата:
Последний раз редактировалось Kailon, 05.04.2016 в 14:38. |
|
#5
|
|||
|
|||
|
1. Разве это не то, что я делаю? fstr.loadfromstream(fs) и fs.free
2) Изначально я так и планировал, но судя по всему программа сохраняет файл только завершению работы, из-за этого не срабатывает флаг изменения файла Приходиться по-кривому в потоке с ключем fmShareDenyNone. Можно конечно переписать чтобы читал не с нуля, но если каунтер вернет не то значение, мы вернемся откуда и пришли Последний раз редактировалось nixon232, 05.04.2016 в 17:07. |
|
#6
|
||||
|
||||
|
Если программа которая пишет лог "не сохраняет файл" до окончания времени работы, то винда буфер записи будет сбрасывать на диск "как Бог на душу положит".
|
|
#7
|
|||
|
|||
|
Цитата:
|
|
#9
|
|||
|
|||
|
У меня в принципе так и реализован был мониторинг, но только я нашел сорс в виде компонента. Вот только 2 флага, которые бы мне помогли имеют примечание:
Цитата:
|
|
#10
|
||||
|
||||
|
На каком этапе сейчас дело? Все работает или же все так же непонятно?
|
|
#11
|
|||
|
|||
|
А может с другим файлом попробовать, который не переписывается? Тоже стало интересно.
|
|
#12
|
|||
|
|||
|
Цитата:
Цитата:
Может из-за того, что я вызываю из JVthreadTimmer? Но вроде сборка достойная. в догонку вопрос: нужно узнать все окна определенного класса. Пока они есть, с ними работаем. Сейчас у меня в потоке зациклено Код:
EnumWindows(@EnumWindowsProc, 0); Если более красивый способ без перебора и хукков? нужно поймать появление окна и уничтожение. |