Иллюстрированный самоучитель по задачам и примерам Assembler

Создание, открытие, закрытие и удаление файла

Создание и открытие файла в 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.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.