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

Вниз

чтение из "занятого" файла   Найти похожие ветки 

 
dskin   (2006-04-17 17:47) [0]

Здравствуйте.
Есть такая ситуация: Постоянно ведется log-файл. Необходимо дочитывать из него информацию, т.е алгоритм доходит до конца файла, останавливается. Через секунду(например) он смотрит с того самого места (т.е. с тем же указателем) есть дальше строчки иди нет, если да – то дочитывать. Вопрос – как читать из файла, когда он открыт для записи другой прогой и как производить дочитывание? Заранее спасибо.


 
TUser ©   (2006-04-17 18:03) [1]

Что мешает написать примерно так (в отд. потоке, разумеется)

while not Terminated do begin

while not eof (f) do begin
readln(f,s);
{do work}
end;

sleep (1000);
end;


 
n0name   (2006-04-17 19:09) [2]

Без извратов никак.
С извратами -  "3 метода работы с занятыми файлами" от Ms-Rem.


 
dskin   (2006-04-17 23:27) [3]

Уважаемый TUser, вопрос как раз и стоит в том, как реализовать строчку readln(f,s) с учетом того, что необходимый файл используется для записи другой программой (увазанный вами пример не работает). А второй вопрос - пусть я дочитал до конца файла (eof(f)), но через секунду то же место не будет концом файла, и мне необходими ДОЧИТАТЬ новые строки. С учетом того, что файл имеет очень большие значения, перечитывать его очень не рационально.
Заранее спасибо за ваш пост.


 
Elen ©   (2006-04-18 08:16) [4]

В Delphi можно использовать компонент TListBox его метод
Listbox1.Items.LoadFromFile следующим образом :

try
listbox1.items.loadfromfile
except
// ничего не делать в случае невозможности чтения
end;


Случай невозможности чтения как раз может сработать когда файл открыт другой прогой


 
balepa ©   (2006-04-18 09:35) [5]

Может CreateFileMapping


 
Slym ©   (2006-04-18 15:10) [6]

открыть файл с соответствующими опциями... FILE_SHARE_WRITE


 
Rouse_ ©   (2006-04-18 15:43) [7]


> Без извратов никак.
> С извратами -  "3 метода работы с занятыми файлами" от Ms-
> Rem.

И вот так не открывается?
   hFile := CreateFile(PChar(FDigest.Items[Index].DigestPath), GENERIC_READ,
     FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, FILE_FLAG_SEQUENTIAL_SCAN);
   if hFile <> INVALID_HANDLE_VALUE then
   try
     FileSize := GetFileSize(hFile, @FileSizeHigh);
     hMapFile := CreateFileMapping(hFile, nil, PAGE_READONLY, 0, 0, nil);


 
n0name   (2006-04-18 19:22) [8]


> И вот так не открывается?


>  для записи другой прогой

Смотря как открыт другой прогой.


 
Rouse_ ©   (2006-04-18 21:54) [9]

Покажи пример чтобы не открывался данным кодом...


 
n0name   (2006-04-19 15:16) [10]

hFile := CreateFile("C:\1.txt", GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
dwShareMode
...
If this parameter is zero and CreateFile succeeds, the object cannot be shared and cannot be opened again until the handle is closed. For more information about sharing violations, see the Remarks section.


 
Rouse_ ©   (2006-04-19 17:23) [11]

Мдя... Правильно, это StgCreateDocfile со своим STGM_SHARE_EXCLUSIVE не блокирует...


 
Yanis ©   (2006-04-19 21:56) [12]

http://www.wasm.ru/article.php?article=lockfileswork



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

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

Наверх




Память: 0.49 MB
Время: 0.069 c
2-1153587506
AlexeyT
2006-07-22 20:58
2006.08.13
Как определить высоту строки Memo, зная размер шрифта?


15-1152854597
tButton
2006-07-14 09:23
2006.08.13
первый


2-1153663394
Bambucha
2006-07-23 18:03
2006.08.13
Shell Extensions


15-1151643721
Loginov Dmitry
2006-06-30 09:02
2006.08.13
Спамеры!


3-1149738973
Soi
2006-06-08 07:56
2006.08.13
Экспорт данных из одной таблицы в другую