Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-59097
maximus1986
2002-11-05 20:34
2002.11.18
НЕ машет в чём проблема????


6-59299
Aralekin
2002-09-20 17:58
2002.11.18
Широковещательный пакет


1-59101
nUcL34r
2002-11-08 03:12
2002.11.18
Насчет randomiz а....


1-59090
dronas555
2002-11-07 18:42
2002.11.18
THandle


1-59241
down
2002-11-06 19:37
2002.11.18
OemToChar, CharToOem для произвольных кодировок





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский