делфи,список файлов

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by AGIMgal, 25 Jul 2010.

  1. AGIMgal

    AGIMgal New Member

    Joined:
    9 Jun 2010
    Messages:
    66
    Likes Received:
    0
    Reputations:
    0
    Здраствуйте господа античатовци.
    Я пытаюсь изучить делфи, решил написать программу прикладного характера для семейных нужд, назовём это так.
    по ходу программы требуется написать процедуру, которая имеет 2 пораметра: адрес папки в компьютере(string) и список имён файлов в ней находящихся(TstringList), последний параметр выходной .
    подскажите как это риализовать, пожалуйста.
     
  2. dreamcation

    dreamcation New Member

    Joined:
    2 Apr 2010
    Messages:
    75
    Likes Received:
    0
    Reputations:
    0
    Code:
    procedure ScanDir (Path:string;SearchMask:TStrings;ScanSub:boolean);   
    var  
    SearchRec:TSearchrec;   
    a,i:integer;   
    begin  
    if ScanSub then  
    begin  
    FindFirst(path+'\*.*',faDirectory,SearchRec);{. found}  
    FindNext(SearchRec); {.. found}  
    a:=FindNext(SearchRec);   
    while a=0 do  
    begin  
    if (SearchRec.Attr and faDirectory)>0 then    
        
    ScanDir(Path+'\'+SearchRec.Name,SearchMask,ScanSub);   
    a:=FindNext(SearchRec);   
    end;{while}  
    FindClose(SearchRec);   
    end;{if}  
        
    for i:=0 to SearchMask.Count-1 do  
    begin  
    a:=FindFirst(Path+'\'+SearchMask[i],faAnyFile,SearchRec);   
    while a=0 do  
    begin  
    {operation on file}  
    a:=FindNext(SearchRec);   
    end;{while}  
    FindClose(SearchRec);   
    end;{for}  
        
    end; {ScanDir}
    Path: string - путь до сканируемой папки;
    SearchMask: TStrings - маска для поиска (*.* - отображает все);
    ScanSub: boolean - указывает на необходимость сканирования подпапок;

    {operation on file} - вот тут делаешь с найденным файлами все что хочешь. можно заносить в список.
     
    #2 dreamcation, 25 Jul 2010
    Last edited: 25 Jul 2010
  3. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    http://www.delphisources.ru/pages/faq/faq_delphi_basics/TSearchRec.php.html
    http://www.delphisources.ru/pages/faq/faq_delphi_basics/FindFirst.php.html
    http://www.delphisources.ru/pages/faq/faq_delphi_basics/FindNext.php.html
    http://www.delphisources.ru/pages/faq/faq_delphi_basics/FileSearch.php.html
     
  4. Sams

    Sams Member

    Joined:
    18 Apr 2009
    Messages:
    247
    Likes Received:
    70
    Reputations:
    17
    Code:
    procedure scandir(startdir: string; mask:string; list:tstrings);
    var searchrec : tsearchrec;
    begin
    if mask = '' then mask := '*.*';
    if startdir[length(startdir)] <> '' then startdir := startdir + '';
    if findfirst(startdir+mask, faanyfile, searchrec) = 0 then
    begin
    repeat
    application.processmessages;
    if (searchrec.attr and fadirectory) <> fadirectory then
    list.add(startdir + searchrec.name)
    else if
    (searchrec.name <> '..') and (searchrec.name <> '.') then
    begin
    list.add(startdir + searchrec.name + '');
    scandir(startdir + searchrec.name + '',mask,list);
    end;
    until
    findnext(searchrec) <> 0;
    findclose(searchrec);
    end;
    end;
    Пример использования:
    Code:
    listbox1.items.clear; 
    scandir('c:','',listbox1.items); 
    (с) articles.org.ru
     
  5. AGIMgal

    AGIMgal New Member

    Joined:
    9 Jun 2010
    Messages:
    66
    Likes Received:
    0
    Reputations:
    0
    Спасибо, вроде понимаю код.
    только вот Sams, для чего нужен вророй параметр в твоей процедуре малец не понял.
     
  6. dreamcation

    dreamcation New Member

    Joined:
    2 Apr 2010
    Messages:
    75
    Likes Received:
    0
    Reputations:
    0
    Это маска. если оставить как есть, то будут обрабатываться файлы всех типов.
     
  7. AGIMgal

    AGIMgal New Member

    Joined:
    9 Jun 2010
    Messages:
    66
    Likes Received:
    0
    Reputations:
    0
    а если я поставлю '*.mp3', то будут сканироватся тока mp3? я как то даже на задумывался об этом, может пригодится.Спасибо ещё раз.
     
  8. dreamcation

    dreamcation New Member

    Joined:
    2 Apr 2010
    Messages:
    75
    Likes Received:
    0
    Reputations:
    0
    да, верно. тогда ты получишь только список MP3 файлов находящихся в папке.