|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
TFileStream & TStringList
Не уверен, что угадал с веткой. Задача: прочитать с конца файл, найти данные - уйти. Все хорошо, но в какой то момент файл читается не с конца. такое ощущение, что достигнут максимум 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); Если более красивый способ без перебора и хукков? нужно поймать появление окна и уничтожение. |