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

Вниз

Как узнать, занят ли файл каким-нибудь приложением?   Найти похожие ветки 

 
Брат ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.019 c
4-59482
DeCompiler
2002-10-06 13:24
2002.11.18
Сообщения мыши


1-59153
pag77
2002-11-08 19:32
2002.11.18
кто знает как MessageDlg вывести поверх всех окон?


6-59309
goldzoloto
2002-09-21 13:28
2002.11.18
SOS SOS SOS., откликнетесь кто может.


1-59092
STANT
2002-11-07 17:45
2002.11.18
Экспортировать таблицу из Grid (DBGrid) в RichEdit


1-59274
BofA
2002-11-07 12:51
2002.11.18
Как вывести массив точек на TImage?