Вниз
Скачать: 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-98110
Semion
2002-09-18 08:41
2002.09.30
чужой Edit1


14-98335
Aga
2002-09-05 16:41
2002.09.30
ярлыки


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


1-98052
Ученик
2002-09-19 09:20
2002.09.30
Создание динамических массивов


14-98354
nick_vstu
2002-09-05 11:00
2002.09.30
CGI. Как мне заставить свой комп имполнять CGI.




   Наверх