Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.31;
Скачать: CL | DM;

Вниз

Анализ текстового файла   Найти похожие ветки 

 
SS   (2005-07-14 17:43) [0]

Помогите с такой проблемой:
Пытаюсь програмно анализировать лог файл который ведеться другой программой отправляющей письма. Не получаеться открыть этот файл для чтения (так как он постоянно открыт на запись програмой отправки). В любой программе типа File Manager для просмотра он открываеться. А в Delphi выдаеть ошибку.
При использовании {$I-} ... {$I+} и FileMode := 0; он показывает что он пустой ( efo() = true).
IOResult показывает 32 ошибку.


 
Fay ©   (2005-07-14 17:52) [1]

CreateFile() не катит ?


 
ANB ©   (2005-07-14 17:53) [2]

С флагами надо поработать . . . Смотреть в сторону FileOpen + fmShareDenyNone.


 
SS   (2005-07-14 17:56) [3]

Файл постоянно открыт программой отправки.
я пытаюсь:

{$I-}
AssignFile(Mail_log,Path_1+"ac_log");
FileMode := 0;
Reset(Mail_log);
while not eof(Mail_log) do
begin
...
end;
CloseFile(Mail_log);
{$I+}
или другие варианты - но ничего не получаеться ...


 
Fay ©   (2005-07-14 17:58) [4]

2 ANB ©   (14.07.05 17:53) [2]
>> fmShareDenyNone
Блин, ещё одно волшебство. Неужели все под линух пишут?!


 
SS   (2005-07-14 18:02) [5]

Fay
нет. Вспоминаю молодость пишу консольное приложение для планировщика задач, на анализ лог файла почты. :-)


 
Просто Джо ©   (2005-07-14 18:11) [6]

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

 Handle1 := FileOpen("d:\testfile",fmOpenRead or fmShareDenyNone);
 // пробуем прочитать в заранее подготовленный буфер
 if not ReadFile (Handle1,Buff,Len,BytesRead,nil) then
   RaiseLastOSError;
 FileClose (Handle1);


 
Fay ©   (2005-07-14 18:21) [7]

2 Просто Джо ©   (14.07.05 18:11) [6]
>> Если файл открыт не эксклюзивно
А если FILE_SHARE_WRITE ?

>> Суммирую вышесказанное
А кто проверит результат FileOpen?

P.S.
Всё. Повыёживался, теперь можно поспать 8)


 
Просто Джо ©   (2005-07-14 18:28) [8]


>  [7] Fay ©   (14.07.05 18:21)
> 2 Просто Джо ©   (14.07.05 18:11) [6]
> >> Если файл открыт не эксклюзивно
> А если FILE_SHARE_WRITE ?

Если файл был открыт с FILE_SHARE_WRITE, то код в [6] спокойно откроет файл на чтение.


> А кто проверит результат FileOpen?

Это пример, показывающий суть. Главно выделено жирным. Результат ReadFile проверяется.
ггггг....

> Всё. Повыёживался, теперь можно поспать 8)

Спи спокойно, дорогой друг... :0)


 
Fay ©   (2005-07-14 18:32) [9]

2 Просто Джо ©   (14.07.05 18:28) [8]
>> Если файл был открыт с FILE_SHARE_WRITE, то
>> код в [6] спокойно откроет файл на чтение.

А мне почему-то кажется, что слабо ему будет.


 
Просто Джо ©   (2005-07-14 18:38) [10]


> [9] Fay ©   (14.07.05 18:32)
> А мне почему-то кажется, что слабо ему будет.


FILE_SHARE_WRITE -
Enables subsequent open operations on the object to request write access. Otherwise, other processes cannot open the object if they request write access.
Код в [6] где-то пытается открыть файл с доступом на запись?


 
Fay ©   (2005-07-14 18:47) [11]

2 Просто Джо ©   (14.07.05 18:38) [10]
Ты чё-то не врубился немножко. (Или я уже сплю?)
Если я открою файл
CreateFile(... , FILE_SHARE_WRITE, ...)
то ты не откроешь его на чтение.


 
Просто Джо ©   (2005-07-14 18:53) [12]


>  [11] Fay ©   (14.07.05 18:47)

Это я "не врубился". Ты прав.


 
Fay ©   (2005-07-14 18:55) [13]

2 Просто Джо ©   (14.07.05 18:53) [12]
Спасибо! Успокоил. Я уже начал думать, что брежу и это неочевидно только мне 8)


 
ANB ©   (2005-07-14 21:33) [14]


> Fay ©   (14.07.05 17:58) [4]
- какой линух, в хелпе даже помечено, что это платформозависимый флаг, т.е. только виндовый. Просто FileOpen - делфовая обертка над апишной функцией и ее легче юзать.


 
ANB ©   (2005-07-14 21:35) [15]

Упс. Извиняюсь, платформонезависимый. Но код для линуха другой. Хотя на FileOpen все равно делфа ругается - типа под линухом компилять не буду. И не надо.



Страницы: 1 вся ветка

Текущий архив: 2005.07.31;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.042 c
6-1114320808
X-Disa
2005-04-24 09:33
2005.07.31
TIdHTTP - прервать получение


1-1121235835
silvestr
2005-07-13 10:23
2005.07.31
Как отменить ведыление Listwiew строк программно ?


14-1121026527
Гость__
2005-07-11 00:15
2005.07.31
Банальный вопрос:


1-1121227702
rainy
2005-07-13 08:08
2005.07.31
Создание компонентов


1-1121155439
Dust
2005-07-12 12:03
2005.07.31
CreateThread и метод класса