Форум: "WinAPI";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
Внизчтение из "занятого" файла Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.049 c