Первое правило сисадина: "Лежаший на столе винчестер с данными выглядит точно так же как и винчестер без данных".
Вот пример, который ищет мп3 файлы на жестком диске...
unit Audit1;
interfaceuses windos;
var
dest: string;
procedure dorecurse(dir: string);
implementation{$R *.DFM}procedure Process(dir: string; Searchrec: tsearchrec);
begin
showmessage(Searchrec.name);
case Searchrec.attr of
$10:
if (searchrec.name <> '.') and (searchrec.name <> '..') thenbegin
dorecurse(dir + '\' + searchrec.name);
writeln(dir);
end;
end;
end;
procedure Dorecurse(dir: string);
var
Searchrec: Tsearchrec;
pc: array[0..79] of Char;
begin
StrPCopy(pc, dir + '\*.mp3');
FindFirst(pc, FaAnyfile, SearchRec);
Process(dir, SearchRec);
while FindNext(SearchRec) <> -18 dobegin
Process(dir, SearchRec);
end;
end;
procedure startsearch;
begin
dorecurse(paramstr(1));
end;
begin
startsearch;
end.
Программа для сканирования диска, написанная на Delphi (Pascal). Программа сканирует указанную на командной строке директорию для файлов MP3 и отображает их имена.
Секция интерфейса
Секция interface объявляет использование Windows модуля. Она также определяет два переменных: dest (строка) и процедуру dorecurse, которая принимает строковый параметр dir.
Секция реализации
Секция реализации содержит три процедуры:
Process: Процедура принимает два параметра: dir (строка) и Searchrec (запись Tsearchrec). Она отображает имя файла с помощью ShowMessage, а затем проверяет, является ли файл директории или нет. Если это не директория, она рекурсивно вызывает себя с пути файла в качестве аргумента.
Dorecurse: Процедура принимает один параметр: dir (строка). Она конструирует поиск по каталогу, соединяя путь каталога с *.mp3, и затем использует функцию FindFirst для поиска файлов MP3 в этом каталоге. Процедура Process вызывается для каждого совпадающего файла, и процесс продолжается до тех пор, пока все файлы не будут обработаны.
Startsearch: Процедура принимает никаких параметров и просто вызывает процедуру Dorecurse с первым аргументом командной строки (полученным с помощью Paramstr(1)).
Основная программа
Основная программа начинается с вызова процедуры Startsearch, которая начинает рекурсивный поиск файлов MP3.
Заметки:
Код использует функции FindFirst и FindNext для поиска файлов, которые являются частью Windows API.
Функция ShowMessage используется для отображения имён найденных файлов.
Программа не обрабатывает ошибки или исключения, поэтому она может рухнуть в случае ошибки при выполнении.
Код использует рекурсивный подход для сканирования директории, что может быть неэффективно для больших директорий.
Альтернативное решение:
Вместо использования рекурсии вы можете использовать цикл для итерации файлов в каждом каталоге и обработки их индивидуально. Это бы избежало риска ошибок стека, вызванных глубокой рекурсией. Вы также могли бы рассмотреть использование более эффективного алгоритма поиска, такого как функция FindFirstFile с флагом FIRSTFILE, которая позволяет искать файлы без необходимости итерации над всеми файлами в каталоге.
Также стоит отметить, что это код не очень robust и не обрабатывает многие краевые случаи. Например, он предполагает, что аргумент командной строки является валидным путем директории, и он не обрабатывает ошибки или исключения. В реальном приложении вам нужно добавить код обработки ошибок и валидации для сделать программу более надежной.
В статье описывается простейший сканер диска, написанный на языке программирования Pascal, который ищет файлы с расширением mp3 на жестком диске.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.