Вниз
Скачать: CL | DM;

Почему не удаляется?   Найти похожие ветки 

 
Skywalker ©   (2002-09-19 12:02) [0]

вот есть функция, которая удаляет каталог со всеми подкаталогами и файлами используя рекурсию
вопрос: почему не удаляется самый нижний ПУСТОЙ!!! каталог


function EraseDir(EDir:string):boolean;
var
Index:integer;
SearchRec:TSearchRec;
FileName:string;
Position:byte;

function ExtractBit(Bit:word;Num:integer):boolean;
begin
Result:=false;
Num:=Num Shr (Bit-1);
if ((Num) mod 2)=1 then Result:=true;
end;


begin
Result:=false;
if not DirectoryExists(EDir) then Exit;
EDir:=EDir+"\*.*";
Index:=FindFirst(EDir,faAnyFile,SearchRec);
while Index=0 do
begin
if (SearchRec.Name=".") or (SearchRec.Name="..") then
begin
Index:=FindNext(SearchRec);
continue
end;
FileName:=ExtractFileDir(EDir)+"\"+SearchRec.Name;
if ExtractBit(5,SearchRec.Attr) {faDirectory} then
begin
EraseDir(FileName);
if not RemoveDirectory(pchar(FileName)) then
MessageDlg("Error deleting folder "+FileName,mtError,mbOK,0)
end
else
begin
LDel.Caption:="Удаление: "+FileName;
if not DeleteFile(FileName) then
MessageDlg("Невозможно удалить файл " + FileName,mtError,[mbOK],0)
else
begin
DelSize:=DelSize+SearchRec.Size;
Position:=Round((DelSize/Size)*100);
if Position<=100 then PBar.Position:=Position else PBar.Position:=100
end
end;
Index:=FindNext(SearchRec)
end;
FindClose(SearchRec);
Result:=true;
end;


 
Skywalker ©   (2002-09-19 13:16) [1]

нашел в чем фишка - FindFirst меняет значение CurrentDir
в итоге, приложение не может удалить папку, потому что само ее открыло



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.011 c
1-98068
Лана Розанова
2002-09-19 08:14
2002.09.30
Handle


8-98241
Ascan
2002-05-24 19:26
2002.09.30
Распознаем текст


14-98330
MJH
2002-09-05 05:10
2002.09.30
Кто здесь с Риги ?


7-98368
Леденцов Дима
2002-07-19 20:16
2002.09.30
Как мне подключать эти формы из DLL


1-98210
Андрусь
2002-09-18 12:39
2002.09.30
как по виндовскому Handlу получить pointer на объект




   Наверх