Управление файлами и директориями


Сюда относятся функции, прототипы которых расположены в файлах dir.h, io.h, sys/stat.h, stdio.h, dos.h, time.h.

Эти функции позволяют сделать следующеее:

· создать и удалить субдиректорий любого директория, в т.ч. корневого,

· определить номер текущего активного накопителя и текущий директорий,

· выполнить поиск файла или директория, удовлетворяющего определенным критериям, соответствующим атрибутам «только читаемый», «системный», «архивный» и т.д. (возможен поиск совокупности файлов),

· выполнить сборку и разборку спецификации пути к файлу, содержащей информацию о накопителе, маршруте и т.д.,

· изменить форму доступа к файлу – перейти от потоковой к префиксной форме и наоборот,

· выполнить удаление, переименование файлов и создать резервные копии, при этом возможна автоматическая генерация уникальных имен независимо от пользователя,

· выяснить существование заданного имени файла или директория, переустановить для них параметры или прочитать эти параметры, такие как – размер файла, дата обновления, дата создания, биты прав доступа и пр.,

· выяснить текущее состояние файла – открыт ли, достигнута ли метка конца файла, переустановить режим доступа к открытому файлу и т.д.

Пример

В программе выполняется поиск всех файлов и директориев в соответствии с заданным шаблоном, вводимым в качестве 1-го параметра при запуске программы из командной строки. Шаблон может содержать символы - *, ? и т.д.

void print_element (struct ffblk *);

int main (int argc, char **argv)

{

int new_drive;

static struct ffblk my;

……………………….

// проверка числа введенных аргументов

………………………..

//проверка правильности указания накопителя

if(strchr(argv[1], (int)’:’) != NULL)

{

new_drive = toupper((int)argv[1]) – ‘A’;

if(setdisk(new_drive) < new_drive)

{

printf(“\a%s\n”, “Задан несуществующий накопитель!”);

exit(2);

}

}

// первая попытка поиска

if(findfirst(argv[1], &my, 0xff) == -1)

{

printf(“\a%s\n”, “Нет файлов или директориев, удовл-х шаблону!”);

exit(3);

}

print_element(&my);

// продолжение поиска

while(findnext(&my) == 0)

print_element(&my);

exit(0);

}

Комментарий к этой программе следующий:

· функция strchr() определяет первое вхождение «:» в строку, соответствующую 1-му аргументу,

· функция int setdisk(int drive) выполняет установку накопителя, заданного параметром drive, - ‘A’, соответствует 0, ‘B’, соответствует1 и т.д.; в случае неуспеха возвращается -1, иначе общее число накопителей в системе,

· функция int findfirst(const char* filename, struct ffblk *ffblk, int attrib) ищет 1-й файл, заданный именем filename, удовлетворяющий атрибутам attrib; в случае успеха возвращает 0 и заполняет структурную переменную ffblk, иначе возвращает -1, (struct ffblk содержится в dir.h. выписать 1-е 10 строк)

· функция findnext() продолжает поиск и возвращает -1 в случае неуспеха или возвращает 0 в случае успеха,

· функция print_element() пользовательская – выполняет распечатку найденных параметров (ее реализация должна быть выполнена в качестве упражнения).

Самостоятельно – выяснить что означает значение 0xff? Для этого следует рассмотреть содержимое файла dos.h и в нем константы, начинающиеся с “/FA_”, и проанализировать спецификацию функции findfirst()!

Вопросы для самоконтроля

  • Охарактеризуйте 2 группы функций ввода и вывода!
  • Чем различаются текстовый и бинарный режимы работы с файлами?
  • Как можно выполнить установку режима из программы?
  • В каком файле располагаются символьные константы, определяющие возможные состояния открытого файла?
  • Какой тип структурной переменной соответствует открытому потоку ввода или вывода?
  • Охарактеризуйте режим открытия файла “a+”!
  • Охарактеризуйте режим открытия файла “r+t”!
  • Охарактеризуйте режим открытия файла “w+b”!
  • Какие функции и каким образом могут быть использованы для анализа ошибок открытия, закрытия файлов и операций ввода и вывода?
  • Что выполняют функции perror() и strerror()?
  • Какую информацию содержат переменные sys_nerr и sys_ errlist в stdlib.h?
  • Какие функции выполняют закрытие файловых потоков?
  • Перечислите имена потоков стандартного ввода и вывода!
  • На какие 4 группы делятся функции потокового ввода и вывода?
  • Что содержат функции fprintf() и fscanf() в качестве 1-го и 2-го аргументов?
  • Перечислите операции, которые можно выполнить на основе применения функций управления файлами и директориями!

Вопросы для самостоятельного изучения

· В stdlib.h или errno.h просмотреть возможные коды в errno. Определить максимальный код!

· Выписать 1-е 10 строк struct ffblk, описание которого содержится в dir.h!

· Выяснить что означает значение 0xff (см. представленный выше пример)!

 



Дата добавления: 2016-05-26; просмотров: 1629;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.