Как да получите списък на файловете в папка Делфи, Shinobi

Аз самият многократно задава този въпрос. Например, тук е ситуация: Вие трябва да напишете обработка на партиди. Т.е. потребителят определя папката, в която, например, е един куп подпапки с изображения или на XML файлове. И всичко е добро, но в интернет е пълно с примери за код, където функцията предоставя информация за файловете, които са в папката, която сте посочили. Но подпапки не се проверяват за: съдържа файлове, или не. Как да го оправя?

Ето, аз донесе собствения си опит по този въпрос.

Аз отдавна търси отговор, докато се натъкнах на следния код:

Кодът е хладно, но нещо ... има няколко "но":
1. Например, за да определите папка за търсене на "C: \ Windows \ '. Списъкът включва начини за тип "C: \ Windows \" или "C: \ Windows \ System32. Това е пътят към самата папка, която се разглежда. Аз предлагам да се модернизира процедурата, за да го направят в списъка са включени само пътища, които съдържат връзка към файловете, например, с разширение ".xml".
2. Всички записани в списъка с файлове. Ако сте наистина пакетна обработка, в 80% от случаите не е нужно да се покаже списък на откритите файлове. Като начинаещ в програмирането, в подобна ситуация, бих просто казано имота "ListBox.Visible: = False; ', като по този начин просто да бъде скрит компонент. По това време ми беше казано, че има са скрити визуални обекти - ЗЛО 🙂, защото те заемат твърде много паметта на компютъра, въпреки че не ги използва за други цели. Въз основа на това златно правило, предлагам водене на списък с файлове в TStringList.
И така, да започнем модернизацията на тази функция.

Параграф 1. За да изпълни първата точка, преди да добавите към списъка с файлове, които просто трябва да провери линията с резултата за влизане в състоянието, че пътят, посочва във файл от тип ".xml".

Точка 2. Е, всичко е просто, че е необходимо да предпише различна компонент, който ще поддържа списък.

Важното. Ако решите да използвате друг компонент, обърнете внимание на това, което се случва чрез добавяне на ред. Ето, например, ако напишете "TMemo", тогава ще трябва да се напише следното:

И накрая, бих искал да споделя още един опит в тази тема. Потребителят трябва да укажете папката, съдържаща файловете. Вие няма да искате TOpenDialog. тъй като тя е насочена към отваряне на файла, и ние трябва да изберете папка. Вече съм го пробвал, а потребителят е неудобно.
Ето защо, в тази ситуация, аз препоръчваме да използвате SelectDirectory функция. Ето един пример:

В моя проект, аз използвам две от лентата за напредъка:

- първо показване на цялостния напредък - файл за обработка на списък (за предвижданата линия ProgressOverall.MaxValue: = (SL.Count-1););