Флаги атрибутов файла

октября 12 2009 by admin in Обязательный материал

Теперь обратимся к флагам атрибутов, передаваемым параметром dwFlags-AndAttrs функции CreateFile. Эти флаги рассматриваются системой, только когда создается новый файл и при этом параметр hfileTemplate имеет значение NULL. Большинство этих атрибутов вам уже должны быть знакомы.
Атрибут FILE_ATTRIBUTE_TEMPORARY используется при создании временного файла. При этом CreateFile пытается хранить данные в памяти, а не на диске, что заметно ускоряет доступ к содержимому файла. Если производится запись файла и системе не хватает места в ОЗУ для хранения его содержимого, ОС записывает данные не диск. Для повышения производительности системы можно задать флаг FILE_ATTRIBUTE_TEMPORARY совместно с обсуждавшимся ранее флагом FLAGDELETEONCLOSE. Обычно система сбрасывает кэшируемые данные на диск при закрытии файла, однако, если системе известно, что файл нужно удалить при закрытии, она этого не делает.
Кроме перечисленных флагов, управляющих обменом данными и флагов атрибутов, есть несколько флагов, управляющих защитой при открытии именованных каналов. Я не буду их обсуждать, поскольку они связаны лишь с именованными каналами. Подробности о них см. в описании функции CreateFile в документации Platform SDK.
Последний параметр функции CreateFile — hfileTemplate передает описатель уже открытого файла или имеет значение NULL. Если он указывает описатель файла, CreateFile игнорирует флаги атрибутов в параметре dwFlagsAndAttrs и использует атрибуты файла, указываемого параметром hfileTemplate, который должен быть открыт с флагом GENERIC_READ. Если же CreateFile создает файл, а не открывает существующий, параметр hfileTemplate игнорируется.
При успешном создании/открытии файла или устройства функция CreateFile возвращает описатель этого файла или устройства, при неудачном — INVALID HANDLE VALUE.