Меню сайта
Категории раздела
PHP [0]
Видео уроки [0]
DELPHI [45]
BASIC [0]
HTML [0]
JAVA [0]
C++ / C# [0]
Радио
ЧАТ
200
Облако тегов
Облако фото
Форум
  • композитная арматура (0)
  • Справедливо ли это???? (1)
  • Недвижимость в Тюмени (1)
  • Качество услуг и обслуживания (2)
  • строительный эксперт (0)
  • гид по Греции (0)
  • винные туры по Италии (0)
  • деревянные лестницы (0)
  • гид по Италии (0)
  • Разные поздравления (1)
  • Главная » Статьи » Программисту » DELPHI

    Поиск файлов в определеной директории
    Не правда ли, знакомая ситуация? Необходимо сделать так, чтобы программа искала какой-либо файл... Все, хорошо, если у Вас для этого есть специальная компонента (кстати, не входящая в стандартный набор). А если ее нет? Здесь придется писать алгоритм поиска файла.

    В 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.
    Категория: DELPHI | Добавил: SeM (06.04.2011)
    Просмотров: 1171 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Поиск по сайту
    Новый Год
    Опрос
    Оцените мой сайт


    Всего ответов: 19
    Всего голосовало: 19
    Обсудить на форуме
    Друзья сайта
    измерьте скорость интернета Яндекс.Метрика
    Проверить тИЦ и PR
    Статистика
    Погода
    Яндекс.Погода
    Коменнтарии

    Извиняюсь, заработал. Спасибо за урок biggrin

    Компонент не работает

    Давайте помогу разобраться ? вы хотите что бы когда выбиралась станция сразу начинала проигрывать? скиньте исходник или как лучше связаться с вами?

    у меня все работает!

    Нифига не робит...
    Кто знает как сделать чтобы на жесткий жертвы сохранял..
    ISQ 606017777

    FSDGHDFJHRG


    Отзывы Фото
    6 микр. Красивое место....

    Ершов ))))

    Старый музей но щас его перенесли...

    Фотография под горы smile

    Красивое фото!!! smile

    Copyright MyCorp © 2024