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

Вниз

Вопрос про поиск папок   Найти похожие ветки 

 
Lexan   (2002-02-05 18:59) [0]

Как узнать есть ли в какой-то заданной папке другие папки, а также их названия?


 
yaJohn ©   (2002-02-05 19:06) [1]

FindFirst
FindNext


 
Дучфт   (2002-02-05 19:14) [2]

С помощью этих процедур я пробовал, но ничего не получилось: работал только поиск файлов в заданной папке.


 
Андрей Сенченко ©   (2002-02-05 19:19) [3]

в атрибутах: faDirectory


 
yaJohn ©   (2002-02-05 19:20) [4]

procedure TForm1.Go(path);
var sr: TSearchRec;
i,j: integer;
begin
if findfirst(path+"*.*",$FF,sr)=0 then
repeat
if (sr.Attr and faDirectory)<>0
then begin
if sr.Name[1]<>"." then Go(path+sr.Name+"\");
// delaem chegoto s folderom
end
else // delaem chegoto s failom
until (findnext(sr)<>0);
end;


 
yaJohn ©   (2002-02-05 19:31) [5]

Pardon, ne sovsem korrektno, pod poniatie "faila" popadet v etom sluchae, naprimer, metka toma.... Prosto vidral iz staroy programmi kusok koda, tam eshe obrabotka bila. Stoit posmotret" TSearchRec.Attr


 
Андрей Сенченко ©   (2002-02-05 19:35) [6]

На метку тома через FindFirst FindNext попасть на так то просто


 
Lexan   (2002-02-05 20:07) [7]

При вызове процедуры FindNext происходит ошибка "File access denied", а TSearchRec.Name="."


 
Андрей Сенченко ©   (2002-02-05 20:22) [8]

А КОД ?


 
Lexan   (2002-02-05 20:40) [9]

procedure TForm1.DelDir(Dir:String); var
sSR :TSearchRec;
IRes :Integer;
begin
IRes:=FindFirst(Dir+"*",faDirectory,sSR);
while IRes=0 do begin
DelFiles(Dir+sSr.name+"\");
RmDir(Dir+sSr.name);
IRes:=FindNext(sSR);
end;
FindClose(sSR);
end;
Пробовал FindFirst(Dir+"*.*",$FF,sSR); Результат тот же.




 
Фэ ©   (2002-02-05 20:46) [10]

Лови из загашника

function CreateDirList_(const ParentDirectory: string;
DL: TStringList): Integer;
var
Status: Integer;
SearchRec: TSearchRec;
begin
Result := 0;
Status := FindFirst(SlashSep_(ParentDirectory, "*.*"), faDirectory, SearchRec);
try
while Status = 0 do
begin
if (SearchRec.Attr and faDirectory = faDirectory) then
begin
if (SearchRec.Name <> ".") and (SearchRec.Name <> "..") then
begin
DL.Add(SlashSep_(ParentDirectory,SearchRec.Name));
Inc(Result);
Result := Result + CreateDirList_(DL[DL.Count-1],DL);
end;
end;
Status := FindNext(SearchRec);
end;
finally
FindClose(SearchRec);
end;
end;

SlashSep_() - добавляет слэш при его отсутствии

function SlashSep_(const Path, S: String): String;
begin
if AnsiLastChar(Path)^ <> "\" then
Result := Path + "\" + S
else
Result := Path + S;
end;


 
Фэ ©   (2002-02-05 20:50) [11]

Функция работает рекурсивно и дает все каталоги, начиная с верхнего.
Как ограничить текущим - ясно, надеюсь.
Наличие папок lst.Count > 0 или результат функции.


 
Lexan   (2002-02-07 15:19) [12]

Большое спасибо все, а особеноо Фэ: все заработало!



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

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

Наверх




Память: 0.49 MB
Время: 0.014 c
1-79321
vinni2000
2002-02-07 19:10
2002.02.25
Нужен удобный компонент для выбора Каталога


1-79381
IronHawk
2002-02-08 18:47
2002.02.25
Обьединение нескольких *.txt файлов !


14-79460
False_Delirium
2002-01-05 06:48
2002.02.25
Головой думать нужно...:)..или пища для размышления...


4-79516
Алекс1
2001-12-18 10:16
2002.02.25
Удалить директорию в NT и перезагрузка в NT


3-79270
Pavel_S
2002-01-30 15:50
2002.02.25
Проблема Master-Detail (таблицы в Interbase)