Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Для создания и открытия файлов всех типов служит единственная функция API Win32 – CreateFile. В приложении можно указать, будет ли выполняться чтение из файла, запись в файл или и то и другое. Можно также указать, предусматривается ли совместное использование этого файла для чтения, записи либо для того и другого.
HANDLE CreateFile (LPCTSTR lpszName, DWORD fdwAccess,
DWORD fdwShareMode, LPSECURITY_ATTRIBUTES lpsa,
DWORD fdwCreate, DWORD fdwAttrsAndFlags, HANDLE hTemplateFile)
Возвращаемое значение: дескриптор объекта открытого файла или INVALID_HANDLE_FAILURE в случае неудачи.
Параметры
lpszName – указатель на строку, содержащую имя файла, канала или другого именованного объекта, который требуется открыть или создать
fdwAccess определяет режим доступа для чтения или записи значениями GENERIC_READ и GENERIC_WRITE соответственно. Могут использоваться другие имена констант. Эти значения можно объединить с помощью поразрядного “или”.
fdwShareMode – это объединение поразрядным “или” сочетание приведенных ниже значений:
- 0 – совместный доступ к файлу не допускается.
- FILE_SHARE_READ – другие процессы, включая тот, что сделал данный вызов, могут открывать этот файл для параллельного чтения.
- FILE_SHARE_WRITE – разрешается параллельная запись в файл.
Используя блокировку или другие механизмы, программист должен не допустить параллельных модификаций одного и того же файла.
lpsa указывает на структуру SECURITY_ATTRIBUTES.
fdwCreate определяет, надо ли создать новый файл, заменить существующий файл и т.д. Отдельные значения можно объединить оператором поразрядного “или”.
- CREATE_NEW – завершается неудачей, если указанный файл уже существует; иначе создается новый файл.
- CREATE_ALWAYS – существующий файл заменяется новым.
- OPEN_EXISTING – неудача, если файл не существует.
- OPEN_ALWAYS – файл открывается и создается, если он не существует.
- TRUNCATE_ EXISTING – устанавливается нулевая длина файла. В fdwAccess должен быть задан по крайней мере доступ GENERIC_WRITE.
fdwAttrsAndFlags определяет атрибуты и флаги. Существует 16 флагов и атрибутов. Атрибуты – это характеристики файла, а не открытого дескриптора HANDLE; они игнорируются, когда открывается существующий флаг. Ниже перечислены некоторые важные атрибуты и флаги.
- FILE_ATTRIBUTE_NORMAL – может использоваться, только если не установлены никакие другие атрибуты (однако флаги могут быть установлены).
- FILE_ATTRIBUTE_ READONLY – приложения не могут не писать в файл, ни удалять его.
- FILE_FLAG_DELITE_ON_CLOSE – полезен для временных файлов. Файл удаляется, когда закрывается его последний открытый дескриптор.
- FILE_FLAG_OVERLAPPED – важен для асинхронного ввода-вывода. В Windows он имеет значение NULL всегда, кроме устройств последовательного ввода-вывода.
Еще несколько дополнительных флагов определяют способ обработки файла и позволяют Win32 оптимизировать быстродействие и целостность файла.
- FILE_FLAG_WRITE_THROUGH – промежуточные кэши немедленно записываются в файл на диске.
- FILE_FLAG_NO_BUFFERING – в пространстве пользователя не выполняется буферизация и кэширование, и данные передаются непосредственно в буфера программы и из них.
- FILE_FLAG_RANDOM_ACCESS – файл предназначен для произвольного доступа, и Windows будет пытаться оптимизировать кэширование файла.
- FILE_FLAG_SEQUENTIAL_SCAN – файл предназначен для последовательного доступа, и Windows соответственно оптимизирует к э ширование. Эти два режима доступа не обязательны.
hTemplateFile – дескриптор файла, открытого с GENERIC_READ, определяющий расширенные атрибуты для вновь создаваемого файла, причем значения fdwAttrsAndFlags игнорируются. Обычно этот параметр равен NULL. Параметр hTemplateFile игнорируется, когда открывается существующий файл. С помощью этого параметра можно сделать так, чтобы атрибуты нового файла были такими же, как у существующего.
Закрытие файлов.
Дескрипторы закрываются и системные ресурсы освобождаются почти для всех объектов одной универсальной функцией. При закрытии дескриптора также уменьшается на единицу счетчик ссылок объекта.
BOOL CloseHandle (HANDLE hObject)
Возвращаемое значение: TRUE, если функция выполняется успешно; иначе FALSE.
Чтение файлов.
BOOL ReadFile (HANDLE hFile, LPVOID lpBuffer,
DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped)
Возвращаемое значение: TRUE, если чтение завершается успешно.
Параметры.
hfile – дескриптор файла с доступом GENERIC_READ
lpBuffer указываетнабуфер памяти для получения входных данных.
nNumberOfBytesToRead – количество байтов, которые нужно прочитать из файла.
lpNumberOfBytesRead – указывает на фактическое число байтов, прочитанное функцией ReadFile.
lpOverlapped указывает на структуру OVERLAPPED.
Запись в файл.
BOOL WriteFile (HANDLE hFile, CONST VOID *lpBuffer,
DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped)
Возвращаемое значение: TRUE, если функция завершается успешно, иначе FALSE.
Win32 содержит множество функций управления файлами.
Для удаления файла:
BOOL DeleteFile (LPCTSTR lpszFileName)
Копирование файла:
BOOL CopyFile (LPCTSTR lpszExistingFile, LPCTSTR lpszNewFile,
BOOL fFaillfExists)
CopyFile копирует определенный по имени существующий файл и присваивает копии указанное новое имя. Если файл с новым именем уже существует, он будет заменен, только если fFailIfExists равно FALSE.
Еще двефункции служат для переименования, или "перемещения", файла. Эти функции также могут работать с каталогами.
BOOL MoveFile (LPCTSTR lpszExisting, LPCTSTR lpszNew);
BOOL MoveFileEx (LPCTSTR lpszExisting, LPCTSTR lpSzNew, DWORD fdwFlags)
MoveFile завершается неудачно, если новый файл уже существует; для существующих файлов следует применять MoveFileEx.
Параметры
lpszExisting определяет имя существующего файла или каталога.
lpszNew определяет имя нового файла или каталога, который в MoveFile не должен существовать. Новый файл может находиться в другой файловой системе или на другом диске, но новые каталоги должны быть на том же диске. Если этот параметр имеет значение NULL, существующий файл удаляется.
fdwFlags определяет следующие опции:
• MOVEFILE_REPLACE_EXISTING — используется для замены существующего файла;
• MOVEFILE_WRITETHROUGH — гарантирует, что функция не возвращает управление, пока скопированный файл не будет переписан из промежуточного буфера на диск;
• MOVEFILE_COPY_ALLOWED — когда новый файл находитсяна другом томе, перемещение осуществляется путем выполнения CopyFile и DeleteFile;
• MOVEFILE_DELAY_UNTIL_REBOOT — этот флаг, который не может применяться вместе с movefile_copy_allowed, разрешен только для администраторов и задерживает фактическое перемещение файла до перезапуска системы.
Перемещение (переименование) файлов связано с несколькими важными ограничениями.
• Поскольку в Windows 9x не реализована функция MoveFileEx, ее необходимо
заменять последовательностью CopyFile и DeleteFile. Это означает, что в какой-то момент времени будут существовать две копии, что может вызвать проблемы при почти заполненном диске или большом файле. Этот способ влияет на атрибуты файла иначе, чем "настоящее" перемещение.
• В именах файлов или каталогов не допускаются подстановочные знаки. Следует
указывать конкретное имя.
Дата публикования: 2015-11-01; Прочитано: 374 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!