Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с файловой системой DOS.doc
Скачиваний:
3
Добавлен:
16.11.2019
Размер:
299.01 Кб
Скачать

Int _dos_findfirst(char *pattern, struct find_t *found, unsigned attr);

Int _dos_findnext(struct find_t *found);

В этих функциях параметр pattern определяет образец для поиска файлов, параметр attr - атрибуты файла - используется в качестве дополнительного критерия поиска. Параметр found представляет собой указатель на структуру, в которую будет записываться информация о найденных файлах. Эта структура определена в файле dos.h:

struct find_t {

char reserved[21];

// Зарезервировано для DOS

char attrib; // Атрибуты файла

unsigned wr_time;// Время изменения файла

unsigned wr_date; // Дата изменения файла

long size; // Размер файла в байтах

char name[13]; // Имя файла и расширение

};

Приведем текст программы просмотра содержимого каталога. Программа принимает из командной строки параметр - образец для показа файлов. Если вы укажете параметр *.*, будет выведена информация обо всех файлах. Можно задавать полный путь: c:\*.*.

#include <stdlib.h>

#include <stdio.h>

#include <dos.h>

void main(int argc, char *argv[]) ;

void print_info(struct find_t *find);

char *time_conv(unsigned time, char *char_buf);

char *date_conv(unsigned date, char *char_buf);

void main(int argc, char *argv[]) {

struct find_t find;

// Находим первый файл, удовлетворяющий

// критериям поиска.

// В качестве критерия используем образец,

// полученный из командной строки.

// Для поиска используем файлы с любыми

// атрибутами.

if(!_dos_findfirst(argv[1], 0xffff, &find)) {

printf("\n"

"\nИмя файла Аттр. Дата Время Размер"

"\n------------ ----- ------ ------ ------");

// Выводим информацию о первом найденном

// файле на экран

print_info(&find);

}

else {

printf(Задайте образец

для поиска файлов !);

exit(-1);

}

// Выводим информацию об остальных найденных

// файлах

while(!_dos_findnext(&find))

print_info( &find );

exit(0);

}

// Функция для вывода информации о найденных

//файлах:

Void print_info(struct find_t *pfind) {

char timebuf[10], datebuf[12];

// Преобразуем формат даты и времени

// последнего изменения файла:

date_conv(pfind->wr_date, datebuf);

time_conv(pfind->wr_time, timebuf);

// Выводим содержимое дескриптора файла:

printf("\n%-12s",pfind->name);

printf(" %02X %8s %8s %8ld ",

pfind->attrib,

datebuf,

timebuf,

pfind->size);

}

// Функция преобразования формата времени:

char *time_conv(unsigned t, char *buf) {

int h, m;

h = (t >> 11) & 0x1f, m = (t >> 5) & 0x3f;

sprintf(buf, "%2.2d:%02.2d:%02.2d",

h % 12, m, (t & 0x1f) * 2);

return buf;

}

// Функция преобразования формата даты:

char *date_conv(unsigned d, char *buf) {

sprintf(buf, "%2.2d.%02.2d.%04.2d",

d & 0x1f,(d >> 5) & 0x0f, (d >> 9) + 1980);

return buf;

}

При запуске программы с параметром *.com на экран может быть выведена информация:

Имя файла Аттр. Дата Время Размер

------------ ----- ---------- -------- ------

CURDIR.COM 20 24.02.1991 08:40:24 5879

DIRCTL.COM 20 24.02.1991 09:10:30 6273

DISKINFO.COM 20 24.02.1991 04:08:42 6075