Создание, открытие, закрытие и удаление файла
Создание и открытие файла в Win32 производится одной функцией CreateFile.
HANDLE CreateFile (LPCTSTR ipFileName, DWORD dwDesiredAccess. DWORD dwShareMode. LPSECURITY_ATTRIBUTES ipSecurityAttributes, DWORD dwCreationDistribution, DWORD dwFlagsAndAttributes. HANDLE hTemplateFile):
Параметры данной функции имеют размер двойного слова. Их назначение следующее (параметры описаны в порядке, обратном их записи в стек):
- lpFileName – указатель на ASCIIZ-строку с именем (путем) открываемого или создаваемого файла;
- dwDesiredAccess – тип доступа к файлу:
- GENERICREAD = 80000000b – доступ по чтению;
- GENERIC_WRITE = 40000000b – доступ по записи;
- GENERIC_READ+GENERIC_WRITE = 0C0000000h – доступ по чтению-записи;
- DwShareMode – режим разделения файлов между разными процессами, данный параметр может принимать значения:
- 0 – монополизация доступа к файлу;
- FILE_SHARE_READ = 0000000th – другие процессы могут открыть файл, но только по чтению, запись в файл монополизирована процессом, открывшим файл;
- FILESHAREWRITE = 00000002b – другие процессы могут открыть файл, но только по записи, чтение в файл монополизировано процессом, открывшим файл;
- FILE_SHARE_READ+FILE_SHARE_WRITE = 00000003b – другие процессы могут открывать файл по чтению-записи;
- IpSecurityAttributes – указатель на структуру SecurityAttributes (файл winbase.h), определяющую защиту связанного с файлом объекта ядра, при отсутствии защиты заносится NULL;
- dwCreationDistribution – определяет действия для случаев, когда файл существует или не существует (аналог этого параметра используется при вызове описанных выше функций MS DOS 6ch и 716ch), данный параметр может принимать значения:
- CREATE_NEW= 1 – создать новый файл, если файл не существует; если файл существует, то функция завершается формированием ошибки;
- CREATE_ALWAYS=2 – создать новый файл, если файл не существует; если он существует, то заместить новым;
- OPEN_EXISTING=3 – открыть файл, если он существует; если файл не существует, то формируется ошибка;
- OPEN_ALWAYS=4 – открыть файл при его существовании и создать его если файла нет;
- TRUNCATE_EXISTING=5 – открыть файл с усечением его до нулевой длины; если файл не существует, то формируется ошибка;
- DwFlagsAndAttributes – флаги и атрибуты; этот параметр используется для задания характеристик создаваемого файла:
- FILE_ATTRIBUTE_READ0NLY=00000001h – файл только для чтения;
- FILE_ATTRIBUTE_HIDDEN=00000002h – скрытый файл;
- FILE_ATTRIBUTE_SYSTEM=00000004h – системный файл;
- FILE_ATrRIBUTE_DIRECTORY=00000010h – каталог;
- FILE ATTRIBUTE ARCHIVE=00000020h – архивный ф'айл;
- FILE_ATTRIBUTE_N0RMAL=00000080h – обычный файл для чтения-записи (этот атрибут нельзя комбинировать с другими);
- FILE_ATTRIBUTE_TEMPORARY=00000100h – создается временный файл (преимущество этого файла в том, что система стремится не записывать этот файл на диск, а работать с ним в памяти; этот атрибут выгодно комбинировать с флагом FILE_FLAG_DELETE_ON_CLOSE, тогда после закрытия файла в программе он будет удален, не оставив следов на диске, иначе, как и bMS DOS, программе придется "подчищать" за собой содержимое диска);
- FILE_FLAG_WRITE_THR0UGH=80000000h – не использовать промежуточное кэширование при записи на диск, а все изменения записывать прямо на диск;
- FILE_FLAG_NO_BUFFERING=20000000h – не использовать средства буферизации операционной системы;
- FILE_FLAG_RANDOM_ACCESS=10000000h – прямой доступ к файлу (установка этого флага или флага FILE_FLAG_SEQUENTIAL_SCAN позволяет оптимизировать системе процесс кэширования);
- FILE_FLAG_SEQUENTIAL_SCAN=08000000h – последовательный доступ к файлу;
- FILE_FLAG_DELETE_0N_CL0SE=04000000h – удалить файл после его закрытия (см. описание атрибута FILEATTRIBUTETEMPORARY);
- FILE_FLAG_0VERLAPPED=40000000h – асинхронный доступ к файлу (синхронность означает то, что программа, вызвавшая функцию для доступа к файлу, приостанавливается до тех пор, пока не закончит работу функция ввода-вывода);
- hTemplateFile – параметр используется только при создании нового файла, его значением является дескриптор другого существующего и предварительно открытого файла, а новый файл создается с теми же значениями атрибутов и флагов, что и у файла, дескриптор которого указан в параметре hTemplateFile.
При удачном завершении функция возвращает в регистре ЕАХ дескриптор нового файла. В случае неудачи функция возвращает в регистре ЕАХ значение NULL.