Текущий архив: 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.47 MB
Время: 0.043 c