MS-DOS для программиста

Программа DIRLIST


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

Листинг 3.3. Файл dirlist\dirlist.cpp

#include <stdlib.h> #include <stdio.h> #include <dos.h>

void print_info(struct find_t *find); char *time_conv(unsigned time, char *char_buf); char *date_conv(unsigned date, char *char_buf);

#pragma argsused int 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("Задайте образец для поиска файлов !"); return(-1); }

// Выводим информацию об остальных найденных файлах while(!_dos_findnext (&find)) print_info( &find ); return(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, 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; }



Содержание раздела