Cum să obțineți o listă de fișiere în dosarul delphi, Shinobi

M-am întrebat în mod repetat această întrebare. De exemplu, aici este o situație: Ai nevoie pentru a scrie un fișier de procesare lot. Ie utilizatorul specifică folderul în care, de exemplu, este un grup de sub-dosare cu imagini sau XML-fișiere. Și totul este bine, dar internetul este plin de exemple de cod, în cazul în care funcția furnizează informații despre fișierele care sunt în folderul pe care l-ați specificat. Dar subdirectoarele nu sunt verificate pentru: conțin fișiere sau nu. Cum să-l repara?

Aici, am adus propria lor experiență pe această temă.

Am cautat mult timp un răspuns, până când am dat peste următorul cod:

Codul este rece, dar lucrul ... există câteva „dar“:
1. De exemplu, pentru a specifica un dosar pentru a căuta 'C: \ Windows \'. Lista include modalități de tip 'C: \ Windows \' sau 'C: \ Windows \ System32'. Aceasta este calea către directorul în sine, care este vizualizat. Propun să modernizeze procedura să-l facă în lista include numai căile care conțin un link către fișierele, de exemplu, cu „.xml“ extensia.
2. Toate scrise în listbox. Dacă sunteți cu adevărat de prelucrare a lot, în 80% din cazuri nu este necesar pentru a afișa o listă de fișiere găsite. Ca un începător în programare, într-o situație similară, aș pune pur și simplu proprietatea „ListBox.Visible: = False;“, component pur și simplu, prin urmare, să fie ascunsă. La acea vreme, mi sa spus că nu sunt ascunse obiecte vizuale - 🙂 rău, deoarece acestea iau memoria calculatorului prea mult, chiar dacă nu le folosiți în alte scopuri. Pe baza acestei reguli de aur, am sugerăm păstrarea unei liste de fișiere în TStringList.
Și astfel vom începe modernizarea acestei funcții.

Punctul 1. Pentru a-și îndeplini primul punct, înainte de a adăuga la lista de fișiere trebuie doar să verificați linia cu rezultatul pentru intrarea în starea pe care calea către un fișier de tip „.xml“.

Punctul 2. Ei bine, totul este simplu, este necesar să se prescrie o altă componentă, care va păstra o listă.

Punctul important. Dacă decideți să utilizați o componentă diferită, să acorde o atenție la ceea ce se întâmplă prin adăugarea unei linii. Aceasta este, de exemplu, dacă scrie „TMemo“, atunci trebuie să scrie următoarele:

Și, în sfârșit, aș dori să vă împărtășesc mai mult de o experiență în acest subiect. Utilizatorul trebuie să specifice directorul care conține fișierele. Tu nu va dori TOpenDialog. din moment ce vizează deschiderea unui fișier, și avem nevoie pentru a alege un director. Am am încercat deja, iar utilizatorul este inconfortabil.
Prin urmare, în această situație, am sugerăm să utilizați funcția SelectDirectory. Iată un exemplu:

În proiectul meu, am folosi două din bara de progres:

- Se afișează primul progres global - lista de fișiere de procesare (pentru această linie destinată ProgressOverall.MaxValue: = (SL.Count-1););