Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
Не правда ли, знакомая ситуация? Необходимо сделать так, чтобы программа искала какой-либо файл... Все, хорошо, если у Вас для этого есть специальная компонента (кстати, не входящая в стандартный набор). А если ее нет? Здесь придется писать алгоритм поиска файла.
В Delphi существует две функции для поиска файлов. Это:
function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer; function FindNext(var F: TSearchRec): Integer;
Разберемся, что же означают эти функции. Для начала возьмем первую - FindFirst. Разберемся сначала с переменными.
Пример использования переменной Path:
{поиск файлов с любым именем в корне диска C:} Path:='c:*.*'; {поиск файлов в директории E:AUDIO с именем, которое начинается на song3, с расширением .wav} Path:='e:audiosong3?.wav';
Обратите внимание:
Недопустимо использовать символы * и ? в названии директории. Эти символы могут использоваться только в имени файла.
Теперь с этими словами можно обращаться как с цифрами - складывать их и вычитать. Например:
{поиск Скрытых и Системных файлов} Attr := faHidden + faSysFile; {поиск всех файлов, кроме файлов, имеющих атрибут "Только для чтения"} Attr := faAnyFile - faReadOnly;
Однако учтите:
При применении вычитания результат может получиться несколько неожиданным, поэтому им лучше не злоупотреблять.
Теперь разберемся, что же выдает функция. Функция возвращает 0, если была выполнена успешно, или, в противном случае, код ошибки. Кроме того, если функция нашла файл, удовлетворяющий и условиям переменной Path, и условиям переменной Attr, то она записывает результат в переменную F (типа TSearchRec), которая, естественно, должна быть объявлена командой Var.
Тип TSearchRec можно представить как:
type TSearchRec = record Time: Integer; Size: Integer; Attr: Integer; name: TFileName; ExcludeAttr: Integer; FindHandle: THandle; FindData: TWin32FindData; end;
Теперь разберемся, что означает функция FindNext.
Если команда FindFirst нашла какой-либо файл, то, возможно, если имя файла задано с символами * и/или ?, есть еще один или несколько файлов, удовлетворяющих условию поиска. В этом случае и используется команда FindNext. Функция также возвращает 0, если была выполнена успешно, или, в противном случае, код ошибки. И также записывает данные в переменную F.
Теперь, зная эти две команды, можно составить и алгоритм поиска заданного файла.
Простейший алгоритм:
var F: TSearchRec; Path: string; Attr: Integer; begin {Искать все файлы в заданной директории с расширение .wav} Path := 'e:audioalbum31*.wav'; {которые имеют атрибуты "Только для чтения" и "Архивный"} Attr := faReadOnly + faArchive; FindFirst(Path, Attr, F); {Если хотя бы один файл найден, то продолжить поиск} if F.name <> '' then begin ListBox1.Items.Add(F.name); {Добавление в TListBox имени найденного файла} while FindNext(F) = 0 do ListBox1.Items.Add(F.name); end; FindClose(F); end.
Обратите внимание на процедуру FindClose. Она освобождает память, которую заняли функции FindFirst и FindNext.