Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.047 c
6-1160830636
Вася
2006-10-14 16:57
2007.03.25
свойства протокола TCP/IP в реестре WINDOWS XP


1-1170144704
Yevgeny
2007-01-30 11:11
2007.03.25
Выбор в DBGrid по Shift-LeftClick


15-1172697296
BoB-final
2007-03-01 00:14
2007.03.25
В каких случаях Windows считает оконную прог-мму зависшой?


15-1172673922
partizan
2007-02-28 17:45
2007.03.25
Компонента для работы с ФТП


15-1172580322
palva
2007-02-27 15:45
2007.03.25
Что читают в метро





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский