- •Лабораторная работа №5
- •Теоретические сведения
- •Функция поиска файла или каталога на диске findfirst
- •Функция продолжения поиска файла findnext
- •Пример использования функций findfirst и findnext.
- •Строка аргументов
- •Примеры программирования
- •Текст программы.
- •Пояснения к программе.
- •Текст программы.
- •Пояснения к программе.
- •Контрольные вопросы.
- •Лабораторное задание
- •Порядок выполнения лабораторной работы
- •Основные функции работы с каталогами файловой системы
- •Варианты заданий.
Лабораторная работа №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, если файл или каталог не найдены.