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

Вниз

Необходимо очистить директорию   Найти похожие ветки 

 
Roman_S ©   (2007-03-03 10:05) [0]

Необходимо очистить директорию. Ниже представлен замечательный код, который «выметает» буквально всё :-) … Всё, кроме подкаталогов. Как модернизировать данный код для получения желаемого результата?
procedure DeleteDirTree(const Dir:string);
var
 SR:TWin32FindData;
 SH:THandle;
 FullName:string;
begin
 SH:=FindFirstFile(PChar(IncludeTrailingBackSlash(Dir)+"*"),SR);
 if SH<>INVALID_HANDLE_VALUE then try
   repeat
     FullName:=Dir+"\"+SR.cFileName;
     if SR.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY=0 then begin
       if SR.dwFileAttributes and(FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM or FILE_ATTRIBUTE_READONLY)<>0 then
         SetFileAttributes(PChar(FullName),FILE_ATTRIBUTE_NORMAL);
       DeleteFile(PChar(FullName));
     end
     else
       if (StrComp(SR.cFileName,".")<>0)and(StrComp(SR.cFileName,"..")<>0) then DeleteDirTree(FullName);
   until not FindNextFile(SH,SR);
 finally
   Windows.FindClose(SH);
 end;
end;

Очищаемая директория НЕ удаляется!


 
Roman_S ©   (2007-03-03 10:10) [1]

Можно, конечно:
iIndex := FindFirst(sDir, faAnyFile, SearchRec);
while iIndex = 0 do begin
sFileName := ExtractFileDir(sDir)+"\"+SearchRec.Name;
if SearchRec.Attr = faDirectory then begin
if (SearchRec.Name <> "" ) and (SearchRec.Name <> ".") and
(SearchRec.Name <> "..") then MyRemoveDir(sFileName);
iIndex := FindNext(SearchRec);
end;
end;
FindClose(SearchRec);

Но я надеюсь, что Вы подскажете более простой способ, чем добавлять эту громоздкую запись


 
Virgo_Style ©   (2007-03-03 10:19) [2]

чем не устраивает SHFileOperation?


 
Roman_S ©   (2007-03-03 11:11) [3]

чем не устраивает SHFileOperation?
Переделывать? Мне кажется - это последнее, что можно будет сделать!

Хотелось бы разобраться - что не так?


 
ЮЮ ©   (2007-03-03 11:43) [4]

if (StrComp(SR.cFileName,".")<>0)and(StrComp(SR.cFileName,"..")<>0) then begin
 DeleteDirTree(FullName);
 RemoveDir(FullName);
end;


 
Virgo_Style ©   (2007-03-03 11:44) [5]

В первом варианте не обрабатываются подкаталоги (даже если их нет, то каталог все равно не удаляется) , во втором варианте - не обрабатываются файлы и не очень ясно - отдельная ли это процедура, или это (не дай Тьма) дополнение для процедуры в [0].

А в целом, рекурсивный вызов при обнаружении каталога - наиболее простое решение.

Переделывать? Мне кажется - это последнее, что можно будет сделать!
Иногда переделать - это первое, что надо сделать; иногда даже до того, как начинать что-либо делать :-)))


 
ЮЮ ©   (2007-03-03 11:50) [6]


> В первом варианте не обрабатываются подкаталоги

Не вдавался в подробности, но зачем тогда рекурсивный вызов DeleteDirTree?


 
Virgo_Style ©   (2007-03-03 12:05) [7]

ЮЮ ©   (03.03.07 11:50) [6]
Нет. Это я не вдавался в подробности)) действительно, файлы удаляются, не удаляются только сами подкаталоги.


 
Roman_S ©   (2007-03-03 13:37) [8]

ЮЮ ©   (03.03.07 11:43) [4]

- Спасибо, супер!
Единственное, как учесть:
Roman_S ©   (03.03.07 10:05)
Очищаемая директория НЕ удаляется!


 
Roman_S ©   (2007-03-03 14:40) [9]

Попробовал так:
if (StrComp(SR.cFileName,".")<>0)and(StrComp(SR.cFileName,"..")<>0) then begin
DeleteDirTree(FullName);
if StrComp(SR.cFileName,"..")<>0 then RemoveDir(FullName);
end;

и так:
if (StrComp(SR.cFileName,".")<>0)and(StrComp(SR.cFileName,"..")<>0) then begin
DeleteDirTree(FullName);
if StrComp(SR.cFileName,".")<>0 then RemoveDir(FullName);
end;

Удаляется и очищаемый каталог :"-(


 
Roman_S ©   (2007-03-03 19:24) [10]

Прошу прощения - разобрался!



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

Текущий архив: 2007.03.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
2-1172482647
SpellCaster
2007-02-26 12:37
2007.03.25
Глобальные переменные в нитях


2-1172850945
pasha star
2007-03-02 18:55
2007.03.25
Переместить форму в право низ..


15-1172665941
Inco
2007-02-28 15:32
2007.03.25
Как можно получить список выделенных в проводнике файлов


1-1170495138
Medved_
2007-02-03 12:32
2007.03.25
StringGrid


15-1172489465
boriskb
2007-02-26 14:31
2007.03.25
США И Великобритания нашли в Ираке то, что искали