![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Анализ текстового файла [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() не катит ?