Форум: "Основная";
Текущий архив: 2002.11.18;
Скачать: [xml.tar.bz2];
ВнизКак узнать, занят ли файл каким-нибудь приложением? Найти похожие ветки
← →
Брат (2002-11-07 12:14) [0]В программе происходит архивация файлов. Если файл инфицирован, его на время занимает Антивирус Касперского, поэтому Winrar матерится, что не может заархивировать файл... Как узнать, занят ли файл?
← →
Alex4444444444 (2002-11-07 12:18) [1]Poprobovat" ego otkryt"?
← →
Брат (2002-11-07 12:20) [2]
> Poprobovat" ego otkryt"?
чем?
← →
Alex4444444444 (2002-11-07 12:23) [3]FileOpen
← →
Брат (2002-11-07 12:27) [4]ща попробую....
← →
Alex4444444444 (2002-11-07 12:28) [5]Tol"ko ne zapud"te srazu zakryt"!
← →
Брат (2002-11-07 12:31) [6]спасибо... буду пробовать ;-)
если получится - скажу
← →
Брат (2002-11-07 12:54) [7]Что-то не получается.... может ошибка какая-нибудь?
....
procedure TfrmMain.Copying(Dir1: String);
var SR : TSearchRec;
er : Byte;
begin
while er>0 do
begin
er:=0;
if FindFirst(Dir1+"\*.*",faAnyFile,SR)=0 then
begin
if fileopen(Dir1+"\"+SR.Name,fmOpenRead)=-1
then
er:=er+1
else
fileclose(fileopen(Dir1+"\"+SR.Name,fmOpenRead));
while FindNext(SR)=0 do
begin
if fileopen(Dir1+"\"+SR.Name,fmOpenRead)=-1
then
er:=er+1
else
fileclose(fileopen(Dir1+"\"+SR.Name,fmOpenRead));
end;
end;
end;
end;
....
← →
Брат (2002-11-07 12:57) [8]хотя в пошаговом режиме работает......
← →
KoluChi (2002-11-07 13:23) [9]А что не получается? Правда если доступа к файлу нет, то у вас будет бесконечный цикл.
← →
Alex4444444444 (2002-11-07 13:47) [10]Da, chto ne poluchaetsya?
Para zamechanij:
(1) netu FindClose;
(2) esli ya pravil"no ponyal, Vam nuzhno znat", EST"li nedostupnye files ili net. Togda luchshe
if FileOpen(...) = -1 then begin
Error := True;
Exit; // or Break
end;
(3) Vy ne proveryaete, yavlyaetsya li file catalogom (kotoryj, konechno, otkryt" nel"zya);
(4) Navernoe, catalogi nuzhno skanirovat" recursivno (ne zabyv proverit" na "." i ".." !)
(5) Eto delo vkusa, no ya obychno pishu tak (chtoby real"nuyu rabotu s najdennym file"om delat" odin raz):
var Res: Integer;
Res := FindFirst(...);
while Res = 0 do begin
// Do whatever you need to do with the file
Res := FindNext(SR);
end;
FindClose(SR);
← →
Брат (2002-11-07 14:23) [11]
> А что не получается? Правда если доступа к файлу нет, то
> у вас будет бесконечный цикл.
Всё верно. Я выхожу из цикла когда ко всем файлам в папке доступ есть.
← →
Брат (2002-11-07 14:28) [12]
> Da, chto ne poluchaetsya?
> Para zamechanij:
> (1) netu FindClose;
> (2) esli ya pravil"no ponyal, Vam nuzhno znat", EST"li nedostupnye
> files ili net. Togda luchshe
Добавил FileClose - все равно не работает...
Цель моей программы: как известно, Касперский в архивах не лечит. Поэтому я розархивирую файлы из архива во временную папочку. При этом, если файл(ы) инфицирован, Касперский его на время занимает и лечит. Затем я вылеченные файлы заархивирую обратно. Так вот, мне нужно сделать задержку перед архивированием. Это я и пытаюсь сделать процедурой, которую я описал выше... Но не получается...
← →
Alex4444444444 (2002-11-07 14:56) [13](1) FindClose;
(2) Nu, togda nado Sleep, potom scanirovat" (recursivno), i tak v cycle, s vyhodom kogda vse OK. Chto-to typa
function HasLockedFile(const Path: string): Boolean;
procedure FindLockedFile(const Path: string);
var Res: Integer;
SR: TSearchRec;
Handle: Integer;
begin
Res := FindFirst(...);
Result := False;
try
while Res = 0 do begin
if {is folder } then begin
if (SR.Name <> ".") and (SR.Name <> "..") then
FindLockedFile();
end
else begin
Handle = FileOpen(SR.Name, ...);
if Handle <= 0 then
raise TException.Create("")
else FileClose(Handle);
end;
Res := FindNext(SR);
end;
finally
FindClose(SR);
end;
end;
begin
Result := False;
try
FindLockedFile(Path);
except
Result := True;
end;
end;
repeat
Sleep(1000);
until not HasLockedFile(MyDir);
Sm. takzhe (3)--(5)
← →
Alex4444444444 (2002-11-07 14:57) [14]Da, sluchayno zametil BOL"SHUYU oshibku u Vas:
FileClose nuzhno peredavat" Handle, vozvrashennyj PERVOY FileOpen!
← →
Брат (2002-11-07 15:30) [15]Спасибо, брат. Я заметил эту ошибку... Все равно ничо не получается. :-((
И ваш код встроил - все равно WinRar Выдает ошибку, что не удается найти файл....Хотя он есть...
← →
Геннадий (2002-11-07 15:41) [16]Маленькое дополнение - открывать файл нужно для записи. Для чтения он может быть доступен и Касперскому и Вам. Хотя, я могу и заблуждаться.
← →
Брат (2002-11-07 15:45) [17]
> Маленькое дополнение - открывать файл нужно для записи.
> Для чтения он может быть доступен и Касперскому и Вам. Хотя,
> я могу и заблуждаться.
все верно. Открываю так - FileOpen(SR.Name,fmOpenWrite);
← →
Alex4444444444 (2002-11-07 16:50) [18]Nu, ne znayu... Poprobujte, v kachestve debugging"a, porabotat" s ODNIM etim concretnym file"om. Chto, Vy otkryt" mozhete, a WinRar net? K stati, ya ne dumayu, chto WinRAR"u oni nuzhny dlya zapisi, hotya, kto znaet... Eshe, FileOpen(.., fmOpenWrite) mozhet vydavat" oshibku prosto potomu, chto file readonly (hotya ya i ne uveren).
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.11.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c