Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-88028
Grey
2003-03-14 11:21
2003.03.27
Как программно отключить обработчик события OnCalcFields ?


1-88052
BofA
2003-03-14 23:30
2003.03.27
Как получить значение по умолчанию свойства класса?


1-87929
8fr0st8
2003-03-17 15:28
2003.03.27
Плавающие панели инструментов


1-88004
Sergei
2003-03-14 09:21
2003.03.27
Вопрос по TLabel


6-88106
_MAD_
2003-02-04 14:10
2003.03.27
Bytesend; Byteresive





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