Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен / Answers (41-64).docx
Скачиваний:
201
Добавлен:
15.06.2014
Размер:
39.72 Кб
Скачать

53. Программный опрос файловой системы в Windows

В операционных системах типа Windows разработчики включили проверку условия для имени файла в действия соответствующей системной функции. В этой ОС основных функций, работающих с содержимым каталогов, – две: функция поиска первого файла по задаваемому условию и функция поиска следующего файла по тому же условию. Само условие задается как метанотация, т.е. записью совокупности файлов с помощью метасимволов * и ? в соответствующем аргументе имени файла. Использование этих метасимволов полностью совпадает с традиционным их применением в командах операционной системы, восходящим к правилам командного интерпретатора Unix.

В Windows для поиска первого файла в каталоге служит функция с прототипом

HANDLE FindFirstFile(char *metaname, WIN32_FIND_DATA *FindFileData),

Для поиска следующих файлов, удовлетворяющих той же метанотации, что была задана при выполнении функции FindFirstFile, в Windows служит функция с прототипом

BOOL FindNextFile(HANDLE hFindFile, WIN32_FIND_DATA *FindFileData),

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

В завершение работы с каталогом должна вызываться функция с прототипом

BOOL FindClose(HANDLE hFindFile),

которая закрывает хэндл, ранее полученный от функции FindFirstFile.

Для вспомогательных действий по переустановке текущего каталога предназначена в Windows функция с прототипом

BOOL SetCurrentDirectory(char *PathName))

а также функция с прототипом

DWORD GetCurrentDirectory(DWORD BufferSize, char *Buffer)

которая позволяет запомнить в символьном массиве полное имя текущего каталога.

54. Программный опрос файловой системы в Unix

В ОС Unix операции с каталогом строятся подобно операциям с типизированными файлами, используемыми в Паскале, а именно, вводится указатель на структуру данных, описывающую каталог. Эта структура описана в заголовочном файле dirent.h и имеет имя DIR. Указатель на эту структуру данных используется для получения значения от функции opendir, имеющей прототип

DIR* opendir(char *dirname)

Дальнейшие действия выполняются системной функцией с прототипом

struct dirent *readdir(DIR* dirptr)

с аргументом, полученным от предыдущей функции. Каждое выполнение вызова readdir() возвращает указатель на содержимое структуры типа dirent, содержащей информацию об очередном элементе каталога. Эта структура данных описана также в заголовочном файле dirent.h. В последней структуре два основных поля, которые заданы в ней как

ino_t d_ino; /* Номер индексного дескриптора */

char d_name[ ]; /* Имя файла, заканчивающегося нулевым байтом*/

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

После окончания использования указателя на каталог, полученный от функции opendir(), следует выполнить закрытие доступа к каталогу и освобождение ресурсов вызовом функции с прототипом

Соседние файлы в папке Экзамен