![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
чтение из "занятого" файла [D7, Win2k, WinXP]
dskin © (2006-04-17 17:47:00)Здравствуйте.
Есть такая ситуация: Постоянно ведется log-файл. Необходимо дочитывать из него информацию, т.е алгоритм доходит до конца файла, останавливается. Через секунду(например) он смотрит с того самого места (т.е. с тем же указателем) есть дальше строчки иди нет, если да – то дочитывать. Вопрос – как читать из файла, когда он открыт для записи другой прогой и как производить дочитывание? Заранее спасибо.
Yanis (2006-04-19 21:56:00) [1]http://www.wasm.ru/article.php?article=lockfileswork
Rouse_ (2006-04-19 17:23:00) [2]Мдя... Правильно, это StgCreateDocfile со своим STGM_SHARE_EXCLUSIVE не блокирует...
n0name (2006-04-19 15:16:00) [3]
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-18 21:54:00) [4]Покажи пример чтобы не открывался данным кодом...
n0name (2006-04-18 19:22:00) [5]
> И вот так не открывается?
> для записи другой прогой
Смотря как открыт другой прогой.
Rouse_ (2006-04-18 15:43:00) [6]
> Без извратов никак.
> С извратами - "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);
Slym (2006-04-18 15:10:00) [7]открыть файл с соответствующими опциями... FILE_SHARE_WRITE
balepa (2006-04-18 09:35:00) [8]Может CreateFileMapping
Elen (2006-04-18 08:16:00) [9]В Delphi можно использовать компонент TListBox его метод
Listbox1.Items.LoadFromFile следующим образом :
try
listbox1.items.loadfromfile
except
// ничего не делать в случае невозможности чтения
end;
Случай невозможности чтения как раз может сработать когда файл открыт другой прогой
dskin (2006-04-17 23:27:00) [10]Уважаемый TUser, вопрос как раз и стоит в том, как реализовать строчку readln(f,s) с учетом того, что необходимый файл используется для записи другой программой (увазанный вами пример не работает). А второй вопрос - пусть я дочитал до конца файла (eof(f)), но через секунду то же место не будет концом файла, и мне необходими ДОЧИТАТЬ новые строки. С учетом того, что файл имеет очень большие значения, перечитывать его очень не рационально.
Заранее спасибо за ваш пост.
n0name (2006-04-17 19:09:00) [11]Без извратов никак.
С извратами - "3 метода работы с занятыми файлами" от Ms-Rem.
TUser (2006-04-17 18:03:00) [12]Что мешает написать примерно так (в отд. потоке, разумеется)
while not Terminated do begin
while not eof (f) do begin
readln(f,s);
{do work}
end;
sleep (1000);
end;