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

Вниз

Процедура списка файлов в каталоге   Найти похожие ветки 

 
MsGuns   (2002-09-24 23:40) [0]

Торможу аж стыдно, но ЗАБЫЛ!!!!
Пересмотрел весь хелп по ф-циям и не нашел !
Но ведь есть же простая ф-я выдачи списка всех файлов в указанном каталоге (даже с фильтром), но вылетело :(
Подскажите будьте добры ! Заранее благодарен !


 
RV   (2002-09-25 02:19) [1]

findfirst
findnext
вот так примерно работает

var
path,ss:string;
SerRec:tSearchRec;
begin
memo2.Lines.Clear;
path:="D:\Program Files\WinGate\cache\";
if (findfirst(path+"*.*",faAnyFile,SerRec)=0) then begin
memo2.Lines.Add(SerRec.name);
findnext(SerRec);
while findnext(SerRec)=0 do
if ItHTML(path+SerRec.name) then memo2.Lines.Add(SerRec.name);



end;
end;


 
MBo   (2002-09-25 06:56) [2]

Если надо кратко, можно ListBox послать message LB_DIR и при необходимости скопировать полученные Items куда нужно


 
Харальд   (2002-09-25 10:21) [3]

2 RV. Каждый FindFirst нужно закрывать своим FindClose. И перед циклом FindNext не нужен. А так все правильно.


 
Anatoly Podgoretsky   (2002-09-25 10:28) [4]

Харальд (25.09.02 10:21)
Не для каждого, а для тех вызов которых закончился успешно, не соблюдения этого правила привет к ошибке в некоторых версиях Дельфи, тоже касается WinAPI


 
Zemal   (2002-09-25 12:14) [5]

Anatoly Podgoretsky >>
FindClose закроит поиск даже если он и неначат успешно. Помоему в стандартном примере в Делфе, открытие поиска стоит в разделе "try", а закрытие в разделе "finaly"... так что при закрытии неоткрытого поиска ничего не произойдёт, наверное :)... Насколько я знаю TSearchRec это просто запись, а не класс потомок TObject... и следовательно не требуется его создавать, а потом уничтожать... вот-с... Так что уважаемый Anatoly Podgoretsky вы неправы, хотя я и не проверял, но я так предчувствую, что FindClose просто очищает поля записи TSearchRec (ну, типа, сбрасывает счётчик)... может я и не прав :)... что-то влом смотреть как там всё... :)


 
Сергей Медяник   (2002-09-25 18:56) [6]

Процедура рекурсивного поиска/выборки/обработки файлов по условиям в каталоге и подкаталогах:

DemoFilesList :TStringList
(визуальный компонент, который Visible=False – лень было отслеживать создание и удаление в RunTime)

procedure ProcessFiles;

//процедура собственно поиска. так как вызывается рекурсивно, то в ней нельзя производить никакой подготовки к сканированию (типа очистки списка и пр.
//каталог передается с "\" в конце!!!
procedure RecurseScan(DirName :String);
var
F: TSearchRec;
begin
//для рекурсивного поиска маску здесь менять нельзя
if FindFirst(DirName+"*.*", faAnyFile, F)=0 then
begin
repeat
//если найден каталог и не верхний, сканировать его
if (F.Attr=faDirectory) and (F.Name[1]<>".") then RecurseScan(DirName+F.Name+"\");
//исключаем из имен имена папок и метки дисков
if not ((F.Attr and faDirectory<>0) or (F.Attr and faVolumeID<>0)) then
begin
//проверять маску надо здесь
if MatchesMask(UpperCase(F.Name), "PIC*.JPG") then
begin
//теперь DirName+F.Name – полнейшее имя файла,
//что хочешь, то и делай
// я составлял список JPG картинок для слайд-шоу
DemoFilesList.Items.Append(DirName+F.Name);

//это можно не писать, но тогда прога повиснет на процесс сканирования - по вкусу
Application.ProcessMessages;
end;
end;
until FindNext(F)<>0;
FindClose(F);
end;
end;

begin
//очистка списка файлов
DemoFilesList.Items.Clear;
//передается начальный каталог. В частности у меня: X:\ПУТЬ_ПРОГРАММЫ...\DATA\
RecurseScan(ExtractFilePath(ParamStr(0))+"DATA\");
end;

Здесь все последовательности открытия и закрытия поиска содрал непосредственно из примера в Helpе. У меня алгоритм работает весьма быстро и без глюков на огромном количестве файлов (10-15 вложений, сотни файлов).


 
Ocean   (2002-09-26 12:31) [7]

Спасибо за отлично откомментированный пример, в наше время это редкость. И все же я не могу себе до конца представить программную реализацию рекурсивного алгоритма обхода дерева. Все время кажется, что где-то скрыто какое-то противоречие. Возможно, тут не надо долго рассуждать, глаза боятся, а руки делают.



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

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

Наверх





Память: 0.47 MB
Время: 0.009 c
14-83001
Drova
2002-11-06 23:13
2002.11.25
Что такое одноранговая сеть ?


14-82934
Yuraz
2002-11-04 17:42
2002.11.25
Мониторы


1-82755
V-A-V
2002-11-15 12:55
2002.11.25
Версия приложения


14-82993
slykirill
2002-11-07 12:33
2002.11.25
утилита для конвертирования файла chm в doc.


1-82699
serz
2002-11-14 16:13
2002.11.25
help





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