Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Анализ текстового файла [D6, D7, Win95/98, WinME, WinXP]


SS ©   (2005-07-14 17:43:00) 

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


ANB   (2005-07-14 21:35:00) [1]

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


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


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


Fay   (2005-07-14 18:55:00) [3]

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


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


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

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


Fay   (2005-07-14 18:47:00) [5]

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


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


> [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:32:00) [7]

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

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


Просто Джо   (2005-07-14 18:28:00) [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:21:00) [9]

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

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

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


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

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

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


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

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


Fay   (2005-07-14 17:58:00) [12]

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


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

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

{$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+}
или другие варианты - но ничего не получаеться ...


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

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


Fay   (2005-07-14 17:52:00) [15]

CreateFile() не катит ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо