Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
33
Добавлен:
17.04.2013
Размер:
119.3 Кб
Скачать

Лабораторная работа №5

Работа с каталогами файловой системы на языке СИ++

Цель работы: - изучить возможности работы с каталогами файловой

системы;

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

с использованием функций работы с каталогами файловой

системы.

Теоретические сведения

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

Эти функции обеспечивают поиск заданных файлов, определение текущего каталога, переход к другому каталогу и некоторые другие возможности.

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

#include <dir.h>

#include <dos.h>

Функция поиска файла или каталога на диске findfirst

Прототип функции:

int findfirst ( char *pathname,

struct ffblk *buffer,

int attrib);

Функция начинает поиск файла или каталога на диске. Она находит первый файл, удовлетворяющий заданным условиям.

Аргумент pathname - это адрес строки, содержащей необязательный спецификатор устройства и полное имя искомого файла ( включающего имя пути ). Имя файла может содержать регулярное выражение ( символы ? или * с тем же значением, что и в командной строке MS-DOS ).

Когда заданный файл найден, происходит заполнение структуры, адрес которой задается параметром buffer, информацией о каталоге.

Синтаксис структуры ffblk:

struct ffblk

{

char ff_reserved[21]; // зарезервировано DOS

char ff_attrib; // найденный атрибут

int ff_ftime; // время создания

int ff_fdate; // дата создания

long ff_fsize; // размер

char ff_name[13]; // найденное имя

};

Поле ff_fdate содержит дату создания файла или каталога в следующем виде:

с 0 по 4 бит - число

с 5 по 8 бит - месяц

с 9 по 15 бит - год.

Для получения числа даты создания необходимо значение поля ff_fdate побитово умножить на восьмеричное число 37 : ff_fdate & 037.

Для получения месяца даты создания необходимо преобразовать данное поле следующим образом : ( ff_fdate & 0740 ) >> 5.

Если требуется узнать год создания файла или каталога, то поле ff_fdate необходимо преобразовать следующим образом : ((ff_fdate & 0177000 ) >> 9 ) +1980.

Поле ff_ftime содержит время создания файла или каталога в следующем виде:

с 0 по 4 бит - секунды

с 5 по 10 бит - минуты

с 11 по 15 бит - часы.

Для получения значения минут времени создания файла необходимо выполнить операцию : (ff_ftime & 03740 ) >> 5, для нахождения значения часа:(ff_ftime & 0174000)>>11.

Параметр attrib - байт атрибутов файла MS-DOS, используемый при выборе допустимых файлов в поиске.

Параметр attrib может принимать значения:

A_NORMAL - обычный файл ( чтение/запись )

FA_RDONLY - только чтение

FA_HIDDEN - скрытый файл

FA_SYSTEM - системный файл

FA_LABEL - метка тома

FA_DIRECT - каталог

FA_ARCH - архив.

Поиск производится только в пределах каталога.

Данная функция возвращает значение 0 при успешном поиске и -1, если файл или каталог не найдены.

Соседние файлы в папке Lab6