Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 40038.doc
Скачиваний:
7
Добавлен:
30.04.2022
Размер:
229.89 Кб
Скачать

Управляющие функции файловой системы

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

  • CreatDirectory;

  • RemoveDirectory;

  • SetCurentDirectory;

  • SetFileAttributes;

  • CreateFile;

  • ReadFile;

  • WriteFile;

  • CopyFile;

  • MoveFile;

  • DeleteFile.

CreateDirectory создает директорию с заданным именем. Функция возвращает true при правильном ее выполнении.

Синтаксис: BOOL CreateDirectory(lpPath, lpsa)

LPCTSTR lpPath; // указатель на имя директории

LPSECURITY_ATTRIBUTES lpsa; // указатель на атрибуты безопасности

RemoveDirectory удаляет директорию с заданным именем, не содержащую файлов.

Синтаксис: BOOL RemoveDirectory(lpDir)

LPCTSTR lpDir; // указатель на имя директории

SetCurrentDirectory устанавливает текущую директорию.

Синтаксис:BOOL SetCurrentDirectory(lpCurDir)

LPCTSTR lpCurDir; // указатель на новую директорию

SetFileAttributes устанавливает атрибуты заданного файла. Файлу могут быть присвоены следующие атрибуты:

FILE_ATTRIBUTE_ARCHIVE - архивный файл

FILE_ATTRIBUTE_DIRECTORY - директория

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

FILE_ATTRIBUTE_NORMAL - файл без атрибутов (не

используется совместно с другими)

ILE_ATTRIBUTE_READONLY - файл только для чтения

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

FILE_ATTRIBUTE_TEMPORARY - временный файл

Синтаксис: BOOL SetFileAttributes(lpFileName, dwFileAttributes)

LPCTSTR lpFileName; // указатель на имя файла

DWORD dwFileAttributes; // 32-битовое значение атрибутов файла

CreateFile является многоцелевой функцией. Открывает файл либо устройство для обмена данными.

Синтаксис: HANDLE CreateFile(lpName, fdwAccess, fdwShareMode, lpsa, fdwCreate, fdwAttrsAndFlags, hTemplateFile)

LPCTSTR lpName; // указатель на имя файла или устройства

DWORD fdwAccess; // способ доступа

DWORD fdwShareMode; // режим совместного доступа

LPSECURITY_ATTRIBUTES lpsa; // указатель на атрибуты защиты

DWORD fdwCreate; // способ открытия файла

DWORD fdwAttrsAndFlags; // атрибуты файла

HANDLE hTemplateFile; // идентификатор шаблона файла

Параметр lpName указывает на имя файла (полное или сокращенное) либо на имя устройства:

последовательный порт - "COM1", "COM2" и т.д.;

параллельный порт - "LPT1", "LPT2" и т.д.;

порт текущего принтера - "PRN";

клиент именованного канала   "\\servername\pipe\pipename".

Битовая маска fdwAccess может принимать следующие значения:

0 - чтение или запись производиться не будут (для изменения параметров файла);

GENERIC_READ - устройство доступно для чтения;

GENERIC_WRITE - устройство доступно для записи.

Битовая маска dwShareMode  может принимать следующие значения:

0 - монопольный доступ к устройству;

FILE_SHARE_READ - устройство может открываться для чтения;

FILE_SHARE_WRITE - устройство может открываться для записи.

Параметр fdwCreate может принимать следующие значения:

CREATE_NEW - создание нового файла, если нет еще файла с данным именем;

CREATE_ALWAYS - создание нового файла в любом случае;

OPEN_EXISTING - открыть файл, если он существует; OPEN_ALWAYS - открыть файл в любом случае;

TRUNCATE_EXISTING - открыть существующий файл и установить для него нулевую длину.

Битовая маска fdwAttrsAndFlags может принимать следующие значения:

FILE_ATIBUTE_ARCHIVE - архивный файл (допускает удаление и резервное копирование) задается автоматически при создании файла;

FILE_ATRIBUTE_HIDDEN - скрытый файл (не включается в обычный список каталога);

FILE_ATRIBUTE_NORMAL - нормальный файл (все остальные атрибуты отсутствуют);

FILE_ATRIBUTE_READONLY - только для чтения;

FILE_ATRIBUTE_SYSTEM - системный (используется операционной системой);

FILE_ATRIBUTE_COMPRESSED - сжатые файлы или каталоги;

FILE_ATRIBUTE_OFFLINE - файл отсутствует, но данные перенесены в хранилище;

FILE_ATRIBUTE_TEMPORARY - временный файл (файловая система стремится поместить его в память, что ускорит доступ).

CloseHandle закрывает идентификатор управления, открытый функцией CreateFile.

Синтаксис: BOOL CloseHandle(hObject)

HANDLE hObject; // идентификатор для закрытия

ReadFile позволяет читать данные из файла, открытого функцией CreatеFile. Функция возвращает true при правильном ее выполнении.

Синтаксис: BOOL ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped)

HANDLE hFile; // идентификатор управления открытого файла

LPVOID lpBuffer; // указатель на буфер неопределенного типа для приема данных

DWORD nNumberOfBytesToRead; // какое количество байт необходимо считать

LPDWORD lpNumberOfBytesRead; // указатель на считанное количество байт

LPOVERLAPPED lpOverlapped; // указатель на структуру Overlapped

структура Overlapped содержит информацию, используемую в асинхронном вводе-выводе.

WriteFile ведет запись в файл, открытый функцией CreatеFile. Функция возвращает true при правильном ее выполнении.

Синтаксис: BOOL WriteFile(hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, lpOverlapped)

HANDLE hFile; // идентификатор управления открытого файла

LPCVOID lpBuffer; // указатель на буффер неопределенного типа для записи данных

DWORD nNumberOfBytesToWrite; // количество байт для записи

LPDWORD lpNumberOfBytesWritten; // указатель на записанное количество байт

LPOVERLAPPED lpOverlapped; // указатель на структуру Overlapped

CopyFile копирует данные из существующего файла в новый файл с указанным именем. Функция возвращает true при правильном ее выполнении.

Синтаксис: BOOL CopyFile(lpExistingFile, lpNewFile, fFailIfExists)

LPCTSTR lpExistingFile; // указатель на существующий файл

LPCTSTR lpNewFile; // указатель на имя файла для копирования

BOOL fFailIfExists; // true - отмена функции, если файл для копирования уже существует (false - перезаписать)

MoveFile переносит/переименовывает файл с заданным именем. Функция возвращает true при правильном ее выполнении.

Синтаксис: BOOL MoveFile(lpExisting, lpNew)

LPCTSTR lpExisting; // указатель на имя существующего файла

LPCTSTR lpNew; // указатель на новое имя файла

DeleteFile удаляет файл с заданным именем. Функция возвращает true при правильном ее выполнении.

Синтаксис: BOOL DeleteFile(lpFileName) 

LPCTSTR lpFileName; // указатель на имя файла

По количеству управляющие функции превосходят информационные. Это естественно, так как, во-первых, выполнение той или иной операции может производиться с помощью разных функций с различными параметрами, а во-вторых, выполнение разных по целевому назначению функций влечет за собой сходные изменения файловой системы. Так, например, при выполнении операций: копирования, перемещения, удаления и создания файла; для информационных функций значение имеет лишь присутствие либо отсутствие того или иного файла.

Управление файловой системой сводится к следующим основным действиям:

  • создание или удаление директории;

  • установка текущей директории;

  • установка атрибутов файла;

  • создание или удаление файла;

  • копирование файла;

  • переименование/перемещение файла;

  • чтение или запись файла.

Создание директории

Имя создаваемой директории берется из свойства Text компоненты Edit1. Окно "Сообщение" выводит результат выполнения функции.  

TEdit *Edit1;  void main()  {if (!CreateDirectory(Edit1->Text.c_str(),NULL))    MessageBox(NULL,"Ошибка создания директории!!!","Сообщение",MB_OK);     else MessageBox(NULL,"Директория создана успешно","Сообщение",MB_OK);} 

Удаление директории

Имя удаляемой директории берется из свойства Text компоненты Edit1. При ошибке выводится сообщение.  

TEdit *Edit1;  void main()   {if (!RemoveDirectory(Edit1->Text.c_str()))    MessageBox(NULL,"Ошибка удаления директории!!!","Сообщение",MB_OK);} 

Установка текущей директории

Имя устанавливаемой директории берется из свойства Text компоненты Edit1. При ошибке выводится сообщение.  

TEdit *Edit1;   void main()   MessageBox(NULL,"Ошибка изменения текущей {if (!SetCurrentDirectory(Edit1->Text.c_str()))  директории!!!","Сообщение",MB_OK);} 

Создание файла

Имя создаваемого файла берется из свойства Text компоненты Edit1. Окно "Сообщение" выводит результат выполнения функции.  

TEdit *Edit1;  void main ()  {  HANDLE hFile;  hFile=CreateFile(Edit1->Text.c_str(),NULL,NULL,NULL,CREATE_NEW,NULL,NULL);  if (hFile==INVALID_HANDLE_VALUE)   MessageBox(NULL,"Ошибка создания файла!!!","Сообщение",MB_OK);     else MessageBox(NULL,"Файл создан успешно","Сообщение",MB_OK);  CloseHandle(hFile);  }