Delphi. Получение списка всех файлов в папке и ее подпапках. | Elsper

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

Поэтому оставлю его здесь.

procedure GetAllFiles( Path: string; Lb: TListBox );
var
sRec: TSearchRec;
isFound: boolean;
begin
isFound := FindFirst( Path + ‘\*.*’, faAnyFile, sRec ) = 0;
while isFound do
begin
if ( sRec.Name <> ‘.’ ) and ( sRec.Name <> ‘..’ ) then
begin
if ( sRec.Attr and faDirectory ) = faDirectory then
GetAllFiles( Path + ‘\’ + sRec.Name, Lb );
Lb.Items.Add( Path + ‘\’ + sRec.Name );
end;
Application.ProcessMessages;
isFound := FindNext( sRec ) = 0;
end;
FindClose( sRec );
end;

И вызов что-нибудь типа:  GetAllFiles( ‘C:\’, listbox1 );

p.s. я его честно где-то стащил. :)


Автор: Elsper.ru


Комментарии (14) на запись “Delphi. Получение списка всех файлов в папке и ее подпапках.”

  1. Руслан пишет:

    isFound := FindFirst( Path + ‘\\\\*.*’, faAnyFile, sRec ) = 0; Я не прогер и поэтому все что увидел в этой строке это целых два смайлика, а автор поста их тут увидит, интересно? А то ведь мы видим только то что привыкли. Можно еще пару символов за смайл принять, но как то не особо.

  2. Elsper пишет:

    Ну приглядевшись, смайлики конечно видно.

    Так же как узоры букв в книге если её не читать, а рассматривать.

  3. Alex пишет:

    var sr: TSearchRec;
    begin
    Memo1.Clear;
    if FindFirst(‘C:\*.*’, faAnyFile, sr) = 0 then
    begin
    repeat
    Memo1.Lines.Add(sr.Name);
    until FindNext(sr) 0;
    FindClose(sr);
    end;
    end;

  4. Elsper пишет:

    Хорошо, но не то.
    Код в посте заходит в папки. И выдает полное дерево. Твой, нет.

  5. Проверялкин пишет:

    Этот гнилой код заполонил весь Интернет.
    Он заходит только в одну подпапку!

  6. Elsper пишет:

    Лолчто???

    В середине есть строки

    if ( sRec.Attr and faDirectory ) = faDirectory then
    GetAllFiles( Path + ‘\’ + sRec.Name, Lb );

    догадайтесь зачем они вставлены.

  7. Elsper пишет:

    Сейчас еще раз проверил. Собирает всю структуру.

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

  8. Бауыржан пишет:

    А если нужно добавить только файлы с расширением mp3
    помоги плз ото я не понял этот код

  9. Elsper пишет:

    Бауыржан, попробуй вместо
    isFound := FindFirst( Path + ‘\*.*’, faAnyFile, sRec ) = 0;

    написать

    isFound := FindFirst( Path + ‘\*.mp3’, faAnyFile, sRec ) = 0;

    и между строками

    GetAllFiles( Path + ‘\’ + sRec.Name, Lb );
    Lb.Items.Add( Path + ‘\’ + sRec.Name );

    вставить условие проверки имени файла sRec.Name справишься или условие тоже подсказать?

  10. Бауыржан пишет:

    Спс теперь у меня другая проблема есть папка «музыка» внутри музыки есть папка «Club» если выделить музыку то добавляются файлы которые находится в «Музыка» а те которые находиться в «Club» не добавляются уфф ели как объяснил :-) ))

    procedure GetAllFiles( Path: string; Lb: TListBox );
    var
    sRec: TSearchRec;
    isFound: boolean;
    begin
    isFound := FindFirst( Path + ‘\*.mp3′, faAnyFile, sRec ) = 0;
    while isFound do
    begin
    if ( sRec.Name ‘.’ ) and ( sRec.Name ‘..’ ) then
    begin
    if ( sRec.Attr and faDirectory ) = faDirectory then
    GetAllFiles( Path + ‘\’ + sRec.Name, Lb );
    Lb.Items.Add( Path + ‘\’ + sRec.Name );
    end;
    Application.ProcessMessages;
    isFound := FindNext( sRec ) = 0;
    end;
    FindClose( sRec );
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    GetAllFiles( ‘E:\музыка’, listbox1 );
    end;

    end.

  11. Elsper пишет:

    верни код как было используй то, что в посте
    с ‘\*.mp3’ косяк выходит

    но вместо

    GetAllFiles( Path + ‘\’ + sRec.Name, Lb );
    Lb.Items.Add( Path + ‘\’ + sRec.Name );

    поставь

    GetAllFiles( Path + ‘\’ + sRec.Name, Lb );
    if pos(‘.mp3′,copy(sRec.Name, length(sRec.Name)-3,4))=1 then
    Lb.Items.Add( Path + ‘\’ + sRec.Name );

  12. Бауыржан пишет:

    Спс тебе Большое !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Все получилось :-)

    procedure GetAllFiles( Path: string; Lb: TListBox );
    var
    sRec: TSearchRec;
    isFound: boolean;
    begin
    isFound := FindFirst( Path + ‘\*.*’, faAnyFile, sRec ) = 0;
    while isFound do
    begin
    if ( sRec.Name ‘.’ ) and ( sRec.Name ‘..’ ) then
    begin
    if ( sRec.Attr and faDirectory ) = faDirectory then
    GetAllFiles( Path + ‘\’ + sRec.Name, Lb );
    if pos(‘.mp3′,copy(sRec.Name, length(sRec.Name)-3,4))=1 then
    Lb.Items.Add( Path + ‘\’ + sRec.Name );
    if pos(‘.AAC’,copy(sRec.Name, length(sRec.Name)-3,4))=1 then
    Lb.Items.Add( Path + ‘\’ + sRec.Name );
    end;
    Application.ProcessMessages;
    isFound := FindNext( sRec ) = 0;
    end;
    FindClose( sRec );
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var dir: String;
    pwRoot : PWideChar;
    begin
    if not SelectDirectory(‘Выберите папку с музыкальными файлами’, pwRoot, Dir)
    then Dir :=»
    else Dir := Dir+»;

    GetAllFiles( dir, listbox1 );
    end;

    end.

  13. Elsper пишет:

    ну и отлично =)

  14. Скопировать все файлы из дерева в одну папку. | Elsper пишет:

    [...] хотя у меня есть процедура для того чтобы получить список всех файлов задача требует чтобы все файлы были в одной [...]

Оставить комментарий

Рейтинг блогов

Рейтинг блогов
Яндекс.Метрика