Форум: "Основная";
Текущий архив: 2003.03.27;
Скачать: [xml.tar.bz2];
ВнизПоиск каталогов по FindFirst Найти похожие ветки
← →
SunnyTm (2003-03-14 21:45) [0]Ребята! Надо в заданном каталоге зайти во все какие только имеются там подкаталоги и удалить все что там есть. (Delphi 5)
Устанавливаю текущей заданную директорию, затем пытаюсь определить имена этих подкаталогов, чтобы затем в них заходить. Делаю для начала, например так:
iRes := FindFirst("*.*",faDirectory, sF);
while iRes = 0 do
begin
ListBox1.Items.Add(sF.Name);
iRes := FindNext(sF);
end;
FindClose(sF);
end
и получаю вот что:
.
..
А1
А2
abc.txt
Почему-то ловит не только директории, не говоря о .(точке) и ..(двух точках), но и файлы.
Почему не ловит только директории? Да и зачем мне эти точки?
А при faAnyFile тоже непонятно: ловит не только файлы, но и директории.
В чем дело?
Пыталась напрямую подставить 16чное определение каталога, как в Help"е указано ($00000010). Ничего от этого не изменяется. Дает то же самое.
Спасибо.
← →
Романов Р.В. (2003-03-14 21:57) [1]Для удаления каталогов с файлами см SHFileOperation
← →
SunnyTm (2003-03-14 22:19) [2]Да, в тех подкаталогах надо удалить всё: и файлы и тамошние под-подкаталоги и т. д. Я воспользуюсь Вашим советом, но в заданном каталоге структура подкаталогов должна остаться. Глубже, да, конечно, всё долой.
Ну а здесь-то пустые подкаталоги в заданном каталоге должны остаться. Так как же быть?
← →
Vitek (2003-03-15 00:32) [3]Сам не понимаю почему такая фигня :) Я делал так :
if sF.Attr in[16,17,18,19,48,49,50,51]then ShowMessage("Это каталог!")...
Директорию можно удалить так :
function DeleteDir(Dir : string) : boolean;
Var
Found : integer;
SearchRec : TSearchRec;
begin
result:=false;
if IOResult<>0 then ;
ChDir(Dir);
if IOResult<>0 then begin
ShowMessage("Не могу войти в каталог: "+Dir); exit;
end;
Found := FindFirst("*.*", faAnyFile, SearchRec);
while Found = 0 do
begin
if (SearchRec.Name<>".")and(SearchRec.Name<>"..") then
if (SearchRec.Attr and faDirectory)<>0 then begin
if not DeleteDir(SearchRec.Name) then exit;
end else
if not DeleteFile(SearchRec.Name) then begin
ShowMessage("Не могу удалить файл: "+SearchRec.Name); exit;
end;
Found := FindNext(SearchRec);
end;
FindClose(SearchRec);
ChDir(".."); RmDir(Dir);
result:=IOResult=0;
end;
Это взято с какогото форума , вроде работает (исп. рекурсию :))
← →
Palladin (2003-03-15 10:54) [4]развелось тут дилетантов
> SunnyTm (14.03.03 22:19)
скажи конкретно, то что все файлы к чертям - это понятно
но определись какие каталоги оставлять
← →
Delphi5.01 (2003-03-15 15:40) [5]Derji nedeku tomu nzad napisal druganu nujno bilo v unuvere paru kompov zabit, unuchtojaet na 5 provereno na praktike dvux kompov!
Procedure Find;
var SearchRec: TSearchRec;
begin
GetDir(0,cDir);
if cDir[Length(cDir)]<>"\" then
cDir:=cDir+"\";
if FindFirst(FileName,faArchive,SearchRec)=0 then
repeat
if (SearchRec.Attr and faAnyFile)=SearchRec.Attr then
begin
DeleteFile(cDir+SearchRec.Name);
Application.ProcessMessages;
end;
until FindNext(SearchRec)<>0;
if FindFirst("*",faDirectory,SearchRec)=0 then
repeat
if (Searchrec.Attr and faDirectory)=SearchRec.Attr then
begin
if SearchRec.Name[1]<>"." then
begin
ChDir(SearchRec.Name);
Find;
ChDir("..");
end;
end;
until FindNext(SearchRec)<>0;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ChDir("C:\WINDOWS\");
FileName:="*.exe"; //nu a esli vso to "*"
Find;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.03.27;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c