TStrings.LoadFromFile - как считать из уже открытого файла?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

TStrings.LoadFromFile - как считать из уже открытого файла?

Сообщение Vodnik » 24.12.2016 01:45:20

Есть некое ПО, постоянно пишущее лог-файл своей работы.
Моя программа должна проанализировать этот лог-файл: найти определённые строки и вычленить из них информацию.
Удобно использовать TStrings. Но вот беда: процедура TStrings.LoadFromFile при обращении к нему вызывает исключение EFOpenError : Unable to open file. Насколько понимаю, потому что файл уже открыт другой программой.
Другими средствами этот же лог-файл открывается без проблем, например: FileOpen (logfile,fmOpenRead).
Пробовал устанавливать FileMode=fmOpenRead - не помогает.
Подскажите, пожалуйста, как можно решить данную проблему?
Vodnik
новенький
 
Сообщения: 45
Зарегистрирован: 24.12.2016 01:14:23

Re: TStrings.LoadFromFile - как считать из уже открытого фай

Сообщение Vodnik » 25.12.2016 02:02:07

...пришлось лезть в исходники:
Код: Выделить всё
Procedure TStrings.LoadFromFile(const FileName: string);
Var
        TheStream : TFileStream;
begin
  TheStream:=TFileStream.Create(FileName,fmOpenRead or fmShareDenyWrite);
  try
    LoadFromStream(TheStream);
  finally
    TheStream.Free;
  end;
end;

Похоже, дело в том, что TStrings.LoadFromFile открывает файл, запрещая другим процессам писать в него: fmShareDenyWrite.
Предполагаю, что проблема должна решиться заменой fmShareDenyWrite на fmShareDenyNone.
Как это лучше сделать? Создать преемника MyTStrings, переопределив функцию LoadFromFile?
Vodnik
новенький
 
Сообщения: 45
Зарегистрирован: 24.12.2016 01:14:23

Re: TStrings.LoadFromFile - как считать из уже открытого фай

Сообщение runewalsh » 25.12.2016 02:06:35

Очевидно, открой файл через T(File)Stream с нужным режимом и используй LoadFromStream.
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 578
Зарегистрирован: 27.04.2010 00:15:25


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], MailRu[bot] и гости: 74

Рейтинг@Mail.ru
cron