unsigned _dos_findfirst(const char *fname, int attr, struct find_t*ptr)
unsigned _dos_findnext( struct find_t *ptr)
Эти функции не определены стандартом ANSI С.
Функция _dos_findfirst() ищет первое имя, соответствующее образцу, на который указывает fname. Имя файла может включать как диск, так и путь. Кроме того, имя файла может включать в себя шаблоны подстановки * и ?. В случае нахождения соответствующего файла структура, на которую указывает ptr, заполняется информацией об этом файле.
Структура find_t определена следующим образом:
struct find_t { char reserved[21]; /* используется DOS */ char attrib; /* атрибуты файла */ unsigned wr_time; /* время, когда файл перезаписывался в последний раз */ unsigned wr_date; /* дата, когда файл перезаписывался в последний раз */ long size; /* размер в байтах */ char name [13]; /* имя файла */ };
Параметр attrib определяет, какой тип файлов будет найден функцией _dos_findfirst(). Параметр attrib может быть получен из одного или нескольких макросов, определенных в файле dos.h:
| Макрос | Значение |
|---|---|
| _A_NORMAL | Нормальный файл |
| _A_RDONLY | Файл только для чтения |
| _A_HIDDEN | Скрытый файл |
| _A_SYSTEM | Системный файл |
| _A_VOLID | Метка тома |
| _A_SUBDIR | Подкаталог |
| _A_ARCH | Архивный файл |
Функция _dos_findnext() продолжает поиск, начатый функцией _dos_findfirst(). Буфер, на который указывает параметр ptr, должен быть тем же самым, который использовался при вызове функции _dos_findfirst().
Обе функции _dos_findfirst() и _dos_findnext() при успешном вызове возвращают 0. При неудаче или если найден более чем один файл, возвращается ненулевое значение. При возникновении ошибки переменная errno устанавливается в ENOENT (файл не найден).
Следующая программа выводит все нормальные файлы текущего каталога, имеющие расширение С, а также их размеры: #include <dos.h> #include <stdio.h> int main(void) { struct find_t f; register int done; done = _dos_findfirst("*.с", _A_NORMAL, &f); while(!done) { printf("%s %ld\n", f.name, f.size); done = _dos_findnext (&f); } return 0; }
