↑  ←  Описание функции


_WinAPI_CreateFile

Создает или открывает файл или другое устройство

#include <WinAPI.au3>
_WinAPI_CreateFile($sFileName, $iCreation [, $iAccess = 4 [, $iShare = 0 [, $iAttributes = 0 [, $pSecurity = 0]]]])

Параметры

$sFileName Имя объекта, который создаётся или открывается
$iCreation Действия применимые к файлам, которые существуют или не существует:
    0 - Создает новый файл. Функция не выполняется, если файл существует
    1 - Создает новый файл. Если файл существует, он будет перезаписан
    2 - Открывает файл. Функция не выполняется, если файл не существует
    3 - Открывает файл. Если файл не существует, то функция создает файл
    4 - Открывает файл и обрезает его так, что его размер становится 0 байт. Функция не выполняется, если файл не существует.
$iAccess [необязательный] Доступ к объекту:
    1 - Выполнить
    2 - Чтение
    4 - Запись
$iShare [необязательный] Режим общего доступа к объекту:
    1 - Удаление
    2 - Чтение
    4 - Запись
$iAttributes [необязательный] Атрибуты файла:
    1 - Файл должен быть заархивирован
    2 - Скрытый файл
    4 - Файл только для чтения
    8 - Файл является частью или используется исключительно операционной системой.
$pSecurity [необязательный] Указатель на структуру $tagSECURITY_ATTRIBUTES, которая устанавливает может ли возвращенный дескриптор быть унаследован дочерними процессами. Если pSecurity равен 0, дескриптор не может быть унаследован.

Возвращаемое значение

Успех:Возвращает открытый дескриптор указанного файла
Ошибка:Возвращает 0

См. также

$tagSECURITY_ATTRIBUTES, _WinAPI_CloseHandle, _WinAPI_FlushFileBuffers, _WinAPI_GetFileSizeEx, _WinAPI_ReadFile, _WinAPI_SetEndOfFile, _WinAPI_SetFilePointer, _WinAPI_WriteFile

См. также

Искать CreateFile в библиотеке MSDN

Пример


#include <WinAPI.au3>

Global $sFile, $hFile, $sText, $nBytes, $tBuffer

; 1) Создаёт файл и записывает данные в него
$sFile = @ScriptDir & '\test.txt'
$sText = 'abcdefghijklmnopqrstuvwxyz'
$tBuffer = DllStructCreate("byte[" & StringLen($sText) & "]")
DllStructSetData($tBuffer, 1, $sText)
$hFile = _WinAPI_CreateFile($sFile, 1)
_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), StringLen($sText), $nBytes)
_WinAPI_CloseHandle($hFile)
ConsoleWrite('1) ' & FileRead($sFile) & @CRLF)

; 2) Читает 6 байтов из позиции 3
$tBuffer = DllStructCreate("byte[6]")
$hFile = _WinAPI_CreateFile($sFile, 2, 2)
_WinAPI_SetFilePointer($hFile, 3)
_WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), 6, $nBytes)
_WinAPI_CloseHandle($hFile)
$sText = BinaryToString(DllStructGetData($tBuffer, 1))
ConsoleWrite('2) ' & $sText & @CRLF)

; 3) Записывает предыдущие прочитанные 6 байтов из позиции 3, в ту же позицию, но в верхнем регистре
DllStructSetData($tBuffer, 1, StringUpper($sText))
$hFile = _WinAPI_CreateFile($sFile, 2, 4)
_WinAPI_SetFilePointer($hFile, 3)
_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), 6, $nBytes)
_WinAPI_CloseHandle($hFile)
$tBuffer = 0
ConsoleWrite('3) ' & FileRead($sFile) & @CRLF)

; 4) Обрезает размер файла до 12 байт
$hFile = _WinAPI_CreateFile($sFile, 2, 4)
_WinAPI_SetFilePointer($hFile, 12)
_WinAPI_SetEndOfFile($hFile)
_WinAPI_CloseHandle($hFile)
ConsoleWrite('4) ' & FileRead($sFile) & @CRLF)

FileDelete($sfile)