Обмен баннерами | Помощь сайту  | Реклама у нас | Обратная связь  | Наши услуги | Продажа ICQ | Дешево
Вы вошли как Прохожий Группа "Гости" Вс, 19.05.2024, 12:48 | RSS | Выход
[ Личные сообщения() · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Скачать фильмы 
Заходите на наш новый проект - SatDay.Ru!

Регистрируйтесь, скачивайте, смотрите, читайте, нам не жалко!
 
 
  • Страница 1 из 1
  • 1
Onru Forum » Coding » Delphi и Pascal » Поиск файлов
Поиск файлов
sir-Voland Дата: Ср, 26.03.2008, 17:54 | Сообщение # 1
Хозяин сайта
Группа: Администраторы
Сообщений: 1076

  
Замечания:  ±
Статус: :-(</span
В Delphi существует две функции для поиска файлов. Это:

function FindFirst(const Path: string; Attr: Integer;
var F: TSearchRec): Integer;

function FindNext(var F: TSearchRec): Integer;

Разберемся, что же означают эти функции. Для начала возьмем первую - FindFirst. Разберемся сначала с переменными.

Path
Это переменная, как видно из названия, показывающая путь к директории, где будет производиться поиск файла. Кроме этого, в эту переменную входит также и имя файла (файлов), которые должны быть найдены. Причем, в названии файла можно пользоваться такими символами: * (звездочка) и ? (знак вопроса). Значения этих символов стандартны: знак вопроса - любой допустимый символ, звездочка - комбинация любых допустимых символов. Под допустимыми символами я понимаю символы, которые могут использоваться в операционной системе для обозначения имен файлов.

Пример использования переменной Path:

{поиск файлов с любым именем в корне диска C:}
Path:='c:\*.*';

{поиск файлов в директории E:\AUDIO с именем, которое
начинается на song3, с расширением .wav}
Path:='e:\audio\song3?.wav';

Обратите внимание:

Недопустимо использовать символы * и ? в названии директории. Эти символы могут использоваться только в имени файла.

Attr
Переменная задает тип файлов, которые будут найдены. Тип переменной - Integer. Чтобы не мучаться с запоминанием цифр, рекомендую Вам запомнить такие слова:

* faReadOnly - файлы, у которых установлен аттрибут "Только для чтения".
* faHidden - файлы, у которых установлен атрибут "Скрытые".
* faSysFile - файлы, у которых установлен атрибут "Системный".
* faArchive - файлы, у которых установлен атрибут "Архивный".
* faDirectory - директория. То есть поиск поддиректорий в директории.
* faAnyFile - любой файл (в том числе и faDirectory, и faVolumeID).

Теперь с этими словами можно обращаться как с цифрами - складывать их и вычитать. Например:

{поиск Скрытых и Системных файлов}
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:\audio\album31\*.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.


 
 
Onru Forum » Coding » Delphi и Pascal » Поиск файлов
  • Страница 1 из 1
  • 1
Поиск:
 

 Хостинг от uCoz | Onru Group 2007-2008 | sir-Voland