Уроки Delphi
1. Первая программа
2. Использование компонентов
3. События Delphi
4. Типы данных Delphi
5. Создание своих типов данных
6. Выражения и операторы
7. Работа с файлами в Delphi
8. Дополнительные формы
9. Подпрограммы в Delphi
10. Исключительные ситуации
11. Взаимодействие приложения с пользователем
12. Указатели в Delphi
13. Обзор компонентов
14. Работа со строками
15. Создание интерфейса
16. Графика в Delphi
17. Многопоточность в Delphi
18. Динамическое создание компонентов
Поиск по сайту
Это важно:
Метод Application.ProcessMessages;
Это полезно:
Параметр Sender в обработчиках событий;
Бояться не надо
|
|
Поиск файлов в Delphi поможет найти файлы, подходящие по выбранным программистом критериям - имени, размеру, дате создания и т.д. Поиск файлов может производиться как по всему выбранному диску, так и ограничиться отдельным каталогом. Поиск файлов в Delphi выполняется в три этапа.
-
Сначала находится первый файл, удовлетворяющий заданной маске. Этот поиск осуществляется с помощью функции
function FindFirst(const Path: String; Attr: Integer; var F: TSearchRec): Integer;
Параметр Path задаёт адрес каталога (директории), в котором производится поиск. Он должен завершаться маской имён искомых файлов, например:
'C:\Temp\*.*', '*.txt'.
Символ '*' означает любое количество допустимых в имени файла символов. Если необходимо указать, что символ должен быть только один, то в маске используется символ '?' . Например, маска a*.txt определяет текстовые файлы с именем любой длины начинающиеся на a , а маска a?.txt ограничивает длину имени файлов двумя символами. Если в маске описан только файл, то поиск осуществляется только в текущем каталоге.
Параметр Attr содержит набор атрибутов, которые могут учитываться при отборе файлов:
- faReadOnly = $01 - файл только для чтения;
- faHidden = $02 - скрытый файл;
- faSysFile = $04 - системный файл;
- faVolumeID = $08 - метка диска;
- faDirectory = $10 - каталог (директория);
- faArchive = $20 - архивный файл;
- faAnyFile = $3F - произвольный файл.
Наименования этих атрибутов могут иметь различные имена в различных системах. Именно текое предупреждение выдаёт Delphi при попытке использовать эти имена. Поэтому лучше использовать не наименования, а значения. Однако, тогда возникают непонятки: попробуй догадайся впоследствии, что такое $02 или $08... Поэтому нужно вводить константы с сответствующими значениями, и проблем не будет.
Эти атрибуты имеют значение отдельных битов в результирующем числе Attr. Для задания искомому файлу набора атрибутов их нужно просто просуммировать:
Attr := faReadOnly + faSysFile + faHidden;
Такой набор атрибутов заставит функцию искать только скрытые системные файлы с характеристикой "только для чтения".
Результат поиска содержится в переменной F, имеющей тип TSearchRec:
type TSearchRec = record
Time: Integer;
Size: Integer;
Attr: Integer;
Name: TFileName;
ExcludeAttr: Integer;
FindHandle: THandle;
FindData: TWin32FindData;
end;
Наиболее важными среди полей этой записи являются:
- Name - имя файла;
- Size - Размер файла в байтах;
- Time - время создания файла в формате DOS.
Чтобы определить, имеет ли найденный файл нужный атрибут, используется поразрядное логическое умножение:
if (F.Attr and faDyrectory)=F.Attr
then S:='Это каталог';
То есть, имеющая нужный атрибут переменная F.Attr при поразрядном логическом умножении на него не изменяется.
-
Когда первый файл, удовлетворяющий условиям поиска, найден, вызывается функция
function FindNext(var F: TSearchRec): Integer;
Переменная F, в которой первая функция сохранила результат поиска, передаётся функции FindNext в качестве параметра. На основании записанной в неё информации будет
продолжен поиск следующего подходящего файла.
-
Процесс поиска завершается вызовом процедуры:
procedure FindClose(var F: TSearchRec);
Эта процедура освобождает память, которая была выделена системой для проведения процесса поиска.
Функции FindFirst и FindNext возвращают значение 0, если при поиске не возникло ошибок и очередной файл был найден.
Для примера рассмотрим простую программку, которая поизводит поиск всех файлов на диске C. В программе папка рассматривается как файл, внутрь поиск не лезет. Можно скачать архив с этой программой.
|