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

Вниз

Работа с директориями   Найти похожие ветки 

 
^^^Dragon^^^   (2003-07-24 22:04) [0]

1. Как можно получить список подкаталогов в данном каталоге?
2. Подскажите алгоритм для нахождения файла в катологе, не зная его содержимого (системы подкаталогов)/на диске?
Заранее спасибо!


 
Song   (2003-07-24 22:07) [1]

TSearchRec


 
^^^Dragon^^^   (2003-07-24 22:10) [2]

Я, как бы, только учусь, так что можно поподробнее. Как юзать-то??


 
Palladin   (2003-07-24 22:23) [3]

1 FAQ
2 если не узнаешь содержимое, не найдешь и файл


 
^^^Dragon^^^   (2003-07-24 22:24) [4]

to Paladin А как тогда Windows файлы ищет (Ctrl+f)?


 
Anatoly Podgoretsky   (2003-07-24 23:02) [5]

Смотри в местном чаво пример по фунции FindFirst, а когда Windows файлы ищет, то она тоже этим пользуется, можешь поверить на слово.


 
JohnJ   (2003-07-25 02:20) [6]

Недавно написал программу, которое это дело использует! Вот тебе фрагмент кода, который записывает файлы в массив (мастера! Так как я ещё начинающий на дельфи, прошу подсказать мне, где код можно сократить или улучшить).

У меня в StringGrid1 всего один столбец, в котором пользователем указывается список папок, из которых надо "брать" файлы (причём файлы "берутся" не только из них, но и из вложенных в них папок).


procedure CollectFiles(Sender:TObject);
begin
with Form1 do
begin
while StringGrid1.Cells[0,MLD]<>"" do {MLD-кол-во папок
MAF-кол-во всего файлов. MLD и MAF - глобальные переменные}
{Здесь я считываю список папок, заданных пользователем в StringGrid1 в массив ListDir. При создании формы MLD:=0 и MAF:=0}
begin
ListDir[MLD]:=StringGrid1.Cells[0,MLD];
MLD:=MLD+1;
end;
i:=0; j:=0; {Просто счётчик для циклов}
repeat {Каждый раз этот цикл "осматривает" следующую по списку папку}
FindFirst(ListDir[j]+"\*.*",faAnyFile,SR); {Ищет первый файл в j-ой папке. Параметры процедуры можно посмотреть в стандартном хелпе.}
if SR.Attr<>faDirectory then {Если этот "файл" - не вложенная директория, а файл, то записываем его имя в массив}
begin
AllFiles[i]:=SR.Name;
AllPath[i]:=ListDir[j]+"\"+AllFiles[i]; {Мне нужно было не только имя файла, но и полный путь к нему, поэтому я создал два разных массива, хотя, в обычных случаях можно ограничиться только полными путями к файлу}
i:=i+1;
MAF:=MAF+1;
end
{иначе (если этот "файл" - директория, то добавляем его в список папок, как будто она была введёна в StringGrid1}
else if (SR.Name<>"..") and (SR.Name<>".") then
begin
ListDir[MLD]:=ListDir[j]+"\"+SR.Name;
MLD:=MLD+1;
end;
repeat {Этот цикл ищет все остальные файлы, кроме того, что был найден первым}
k:=FindNext(SR); {Ищем следующий файл}
if k=0 then {Если файлы в папке не кончились, то...}
if SR.Attr<>faDirectory then {Идём по тому же алгоритму, что и в случае поиска первого файла}
begin
if i>MaxNuFiles then {Чтобы избежать переполнения массива}
begin
Memo2.Lines.Add("Ошибка, число файлов больше "+IntToStr(MaxNuFiles));
Exit;
end;
AllFiles[i]:=SR.Name;
AllPath[i]:=ListDir[j]+"\"+AllFiles[i];
i:=i+1;
MAF:=MAF+1;
Label4.Caption:=IntToStr(MAF); {Выводим число найденных файлов.}
end
else if (SR.Name<>"..") and (SR.Name<>".")then
begin
ListDir[MLD]:=ListDir[j]+"\"+SR.Name;
MLD:=MLD+1;
end;
until k<>0; {Выходим из цикла, когда в нём кончатся файлы}
FindClose(SR); {Отмечаем что в этой процедуре искать больше нечего (подробней смотри в хелпе)}
j:=j+1; {Переходим к следующей папке в списке}
until j=MLD; {Выходим из цикла, если проверяли последнюю папку в списке}
end;
end;


Алгоритм я придумал сам, так что если есть уже отработанных, просьба сказать, не таить! :) Единственное что я вижу здесь не хватает, это проверка на ошибки, но у меня не получилось её сделать...


 
JohnJ   (2003-07-25 02:22) [7]

P.S.:Комментарии писал уже в форуме, атк что если где-то забыл закрыть скобку, закройте её сами... :)


 
panov   (2003-07-25 02:39) [8]

>JohnJ © (25.07.03 02:22)

Все же стоит посмотреть в FAQ эту тему...



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

Форум: "Основная";
Текущий архив: 2003.08.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.009 c
1-20526
AlexDBases
2003-07-26 12:15
2003.08.07
О RichEdit


1-20587
VISA
2003-07-24 13:14
2003.08.07
Эмуляция клика на заголовке окна.


6-20649
blackgrin
2003-06-02 02:16
2003.08.07
Connection Closed Gracefully?!


7-20827
h-sargis
2003-05-27 20:30
2003.08.07
Как создать программудля редактирования параметров реестра


3-20424
Nevermind
2003-07-16 17:24
2003.08.07
IXMLNode





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