Опубликован: 25.11.2008 | Уровень: специалист | Доступ: свободно
Лекция 11:

Работа с файлами

< Лекция 10 || Лекция 11: 1234 || Лекция 12 >

10.4. Поиск файлов в каталогах

Одной из довольно распространенных процедур является составление списка файлов указанного каталога, имена которых удовлетворяют заданной маске. Под управлением MS-DOS такая задача решается с помощью функций findfirst (найти первый файл) и findnext (найти следующий файл). Обе функции используют в качестве одного из своих аргументов адрес структуры типа ffblk, в которую они заносят информацию о найденном файле:

struct ffblk {
    char ff_reserved[21];   //зарезервировано для MS-DOS
    char ff_attrib;         //байт атрибутов найденного файла
    int ff_time;            //время создания/модификации файла
    int ff_date;            //дата создания/модификации файла
    long ff_size;           //размер файла
    char ff_name[13];       //имя найденного файла
};

Описание этой структуры и прототипы указанных функций находятся в заголовочном файле dir.h. Обе функции возвращают нулевое значение, если поиск закончился удачно. Достаточно четкое представление об их использовании дает следующий пример, который выводит на экран список всех файлов с расширением .cpp из каталога c:\bc\bin:

#include <stdio.h>
#include <conio.h>
#include <dir.h>
  void main()
{ struct ffblk qq;
  int a;
  printf("Список файлов *.cpp\n");
  a=findfirst("c:\\bc\\bin\\*.cpp",&qq,0);	//поиск первого файла
  while(!a)
    { printf("  %s\n",qq.ff_name);
      a=findnext(&qq);		//поиск следующего файла
    }
  getch();
}

Первый аргумент функции findfirst определяет маску, которой должно удовлетворять имя искомого файла. Третий аргумент этой функции имеет тип int и позволяет фильтровать найденные объекты по любой комбинации их атрибутов в файловой системе (Read Only, Hidden, System, Archive, Volume, Directory). Нулевое значение этого параметра, использованное в примере, игнорирует отбор по атрибутам.

Точно таким же способом можно осуществлять поиск нужных файлов в среде BCB.

< Лекция 10 || Лекция 11: 1234 || Лекция 12 >
Alexey Ku
Alexey Ku
Александру Талееву о проблемах с VS
Александр Талеев
Александр Талеев
вопрос по второй лекции
Игорь Матусевич
Игорь Матусевич
Россия
Александр Мельников
Александр Мельников
Россия