Содержание
  ДОМОЙ
  НОВОСТИ  
  IT АКАДЕМИЯ
  WAP-ВЕРСИЯ
  ФОРУМ
  БЕЗОПАСНОСТЬ
  ПРОГРАММИРОВАНИЕ
  ИНСТРУМЕНТ ВЕБМАСТЕРА
  ВСЁ ДЛЯ КПК
  СТАТЬИ NEW
  СОФТ
  ВИДЕО
  X-INFO
  ПРОКСИ ЛИСТ
  IT МУЗЫКА
  АНЕКДОТЫ
  ССЫЛКИ
  ТЕХ. ПОДДЕРЖКА
  ПРАВООБЛАДАТЕЛЯМ
  О НАС

 

Ваш IP

18.189.170.17

Человек на сайте На сайте: 152 человек(а)

Здесь могла бы
быть Ваша
РЕКЛАМА




Рекурсивный метод поиска файлов
 



Итак, здесь я рассмотрю рекурсивный метод поиска файлов, то есть полноценный поиск файлов в текущем каталоге и всех его подкаталогах. Сложного практически ничего нет, поэтому я выложу сразу исходный код а потом обьясню что к чему.

program Project1;

{$APPTYPE CONSOLE}

uses Windows;

procedure Find;
var
fnd : WIN32_FIND_DATAA;
hnd : THandle;
begin
hnd := FindFirstFile('*', fnd);
repeat
if fnd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then
begin
if ((string(fnd.cFileName) <> '..')
and (string(fnd.cFileName) <> '.')) then
begin
chdir(fnd.cFileName);
Find;
chdir('..');
end;
end
else
begin
WriteLn(fnd.cFileName);
end;
until ( not FindNextFile(hnd, fnd) );end;
FindClose(hnd);
begin
Find;
Read;
end.

Этот небольшой пример выводит в окно консоли содержимое текущего каталога и всех его подкаталогов. Итак, начнём пояснение процедуры Find. Первым делом мы обьявляем переменные, типа WIN32_FIND_DATAA, и THandle. В них хранится прогресс выполнение поиска. Далее мы вызываем АПИ функцию FindFirstFile которой передаём параметры - первый параметр - маска или имя файла который нужно найти, в нашем случае мы поставили *, это означает искать все файлы, второй параметр - имя переменной, куда помещаются свойства найденного файла (имя, размер, дата создания ... ). Значение возвращаемой функции мы присваиваем переменной типа THandle, в ней хранится дескриптор файла, он служит для "сохранения" прогресса поиска. Далее мы запускаем цикл repeat ... until ... , в котором сначала проверяем, является ли найденный файл директорией, если да, то проверяем, не является ли именем каталога ".." или "." (".." и "." - это тоже каталоги, ".." - означает переместится на одну директорию выше), если нет, сменяем текущую директорию на найденную, вызываем процедуру поиска, и сменяем каталог обратно. Если возвращённый дескриптор оказался файлом, значит добавляем строку с именем файла, и выполняем всё это пока значение FindNextFile() остаётся равным true, ему мы передаём два параметра - дескриптор, полученный при вызове FindFirstFile(), и всё туже переменную типа WIN32_FIND_DATAA , куда кладутся сведения о найденном файле. Как видишь всё проще некуда, и напоследок пару полезных вещей: если например каталог не простой, а системный или скрытый, то нужно просто сложить атрибуты, например, тогда строка
if fnd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then
выглядела бы так:
if fnd.dwFileAttributes = (FILE_ATTRIBUTE_DIRECTORY + FILE_ATTRIBUTE_HIDDEN + FILE_ATTRIBUTE_SYSTEM)then
(скрытая системная директория). Ну вот собственно и всё, и напоследок исходник, если вдруг ты чтото недопонял.
Исходник

SLAyer

Другие статьи

По всем вопросам и предложениям по сайту пишите на info@comp-info.ru
 


Содержание
  ДОМОЙ
  НОВОСТИ  
  IT АКАДЕМИЯ
  WAP-ВЕРСИЯ
  ФОРУМ
  БЕЗОПАСНОСТЬ
  ПРОГРАММИРОВАНИЕ
  ИНСТРУМЕНТ ВЕБМАСТЕРА
  ВСЁ ДЛЯ КПК
  СТАТЬИ NEW
  СОФТ
  ВИДЕО
  X-INFO
  ПРОКСИ ЛИСТ
  IT МУЗЫКА
  АНЕКДОТЫ
  ССЫЛКИ
  ТЕХ. ПОДДЕРЖКА
  ПРАВООБЛАДАТЕЛЯМ
  О НАС

 
Поиск по сайту
Утилиты

  Сниффер
  Лог сниффера
  MD5 и Base64
  Декодирование MD5 NEW
 Перекодировщик
  Проверить прокси
  Проверка анонимности
  Генерация пароля
  Скрипт определения IP
  Поиск информации
   Проверить IP (Whois)
   Узнать скорость закачки
   Добавить свой сайт в поисковые системы>
   Подсветка php-кода

ПОЛЕЗНАЯ ИНФОРМАЦИЯ:
  Список национальных доменных имен
  Компьютерные термины
  Смайлики
   Аналоги Win-программ в Linux
   Коды ответа HTTP сервера
   Записки невесты программиста

Здесь могла бы
быть Ваша
РЕКЛАМА





Права на содержащиеся на сайте материалы принадлежат авторам материалов и владельцам проекта.
Copyright Комп-Инфо.ру © 2005