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

Вниз

Поиск каталогов по 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
6-88123
Dmitriy_R
2003-02-03 12:59
2003.03.27
Email Server


4-88303
AllDontFire
2003-01-30 12:01
2003.03.27
Не работает GetBinaryType


4-88312
tga
2003-01-30 07:15
2003.03.27
Как получить список локальных дисков?


8-88095
Arthur1
2002-12-16 15:20
2003.03.27
Как получить последовательность байт звукового канала?


1-87891
badaxe
2003-03-16 13:51
2003.03.27
Как конвертировать String в PwideChar ?