Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Работа с каталогами файловой системы






Прототипы функций, описанных в табл. 8.15, содержатся в стандартном заголовочном файле dir.h. Не все функции описаны в стандарте языка Си, но обычно все они предоставляются комилятором.

Таблица 8.15. Функции для работы с каталогами

Функция Краткое описание
chdir int chdir(const char *path); изменение текущего каталога, заданного полным или относительным путем path. Возвращает 0 в случае успеха, -1 в случае ошибки
getcwd char *getcwd(char *buf, int buflen); получить имя текущего рабочего каталога. В случае успеха buf! =NULL. Ограничения, такие как MAXPATH (макс. длина пути к каталогу) определены в < dir.h>. Аналог - int getcurdir (int drive, char *directory); Диск по умолчанию кодируется как 0, 1 обозначает диск A: и т. д.
mkdir int mkdir(const char *path); пытается создать новый каталог, заданный полным или относительным путем path. В случае успеха вернет 0, иначе -1
rmdir int rmdir(const char *path); удаление каталога, заданного путем path. В случае успеха вернет 0, иначе -1
findfirst int findfirst(const char *pathname, struct ffblk *ffblk, int attrib); начинает поиск файла по шаблону имени pathname. для работы с поиском определен структурный тип ffblk: struct ffblk { long ff_reserved; long ff_fsize; //размер файла unsigned long ff_attrib; //атрибуты unsigned short ff_ftime; //время unsigned short ff_fdate; // дата char ff_name[256]; //найденное имя }; Атрибуты определены в библиотеке dos.h: FA_RDONLY Read-only FA_HIDDEN Hidden FA_SYSTEM System FA_LABEL Volume label FA_DIREC Directory FA_ARCH Archive Поле ff_ftime определяет время следующим образом: биты от 0 до 4 обозначают секунды, деленные на 2, биты 5-10 - минуты, биты 11-15 - часы. Поле ff_fdate определяет дату следующим образом: биты 0-4 обозначают день месяца, биты 5-8 - номер месяца, биты 9-15 - год с 1980 (например, 9 означает 1989). В случае успеха вернет 0, иначе -1
findnext int findnext(struct ffblk *ffblk); продолжает поиск файла по ранее указанному для findfirst шаблону имени
fnmerge void fnmerge(char *path, const char *drive, const char *dir, const char *name, const char *ext); создает полное имя файла из отдельных компонент
fnsplit int fnsplit(const char *path, char *drive, char *dir, char *name, char *ext); разбивает полное имя файла на отдельные компоненты. Вернет целое число, биты которого показывают наличие отдельных компонент
getdisk int getdisk(void); возвращает номер текущего диска. 0 обозначает диск A:, 1 - B: и т. д.
searchpath char *searchpath(const char *file); выполняет поиск файла в каталогах, перечисленных в системной переменной PATH. Если файл найден, вернет полный путь к нему в статическом буфере (обновляется при каждом вызове функции)
setdisk int setdisk(int drive); задает текущее дисковое устройство. Диски обозначаются как для getdisk. Возвращает общее число дисков, доступных в системе

Приведенный далее пример формирует листинг из всех файлов текущего каталога.

#include < stdio.h>

#include < dos.h>

#include < dir.h>

int main(void) {

struct ffblk ffblk;

int done;

printf(" Directory listing of *.*\n");

done = findfirst(" *.*", & ffblk,

FA_ARCH|FA_DIREC);

while (! done) {

unsigned t=ffblk.ff_ftime;

char s=(t& 0x001F)< < 1, m=(t& 0x07E0)> > 5,

h=(t& 0xF800)> > 11;

t=ffblk.ff_fdate;

char d=(t& 0x001F), mon=(t& 0x01E0)> > 5;

int y=(t& 0xFE00)> > 9;

printf(" %s %15ld \

%02d/%02d/%4d, %02d: %02d: %02d\n",

ffblk.ff_name, ffblk.ff_fsize,

d, mon, y+1980, h, m, s);

done = findnext(& ffblk);

}

getchar(); return 0;

}

В следующем примере иллюстрируется работа с функцией fnsplit.

#include < stdlib.h>

#include < stdio.h>

#include < dir.h>

char *s;

char drive[MAXDRIVE];

char dir[MAXDIR];

char file[MAXFILE];

char ext[MAXEXT];

int flags;

s=getenv(" COMSPEC");

flags=fnsplit(s, drive, dir, file, ext);

printf(" Command processor info: \n");

if(flags & DRIVE)

printf(" \tdrive: %s\n", drive);

if(flags & DIRECTORY)

printf(" \tdirectory: %s\n", dir);

if(flags & FILENAME)

printf(" \tfile: %s\n", file);

if(flags & EXTENSION)

printf(" \textension: %s\n", ext);

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.