Функция CreateFile

Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, _
    ByVal dwDesiredAccess As Long, _
	ByVal dwShareMode As Long, _
	lpSecurityAttributes As Any, _
	ByVal dwCreationDisposition As Long, _
	ByVal dwFlagsAndAttributes As Long, _
	ByVal hTemplateFile As Long) As Long

CreateFile создает или открывает объекты - консоль, папки (только открытие), дисковые устройства, файлы и др. Чаще всего функция используется для работы с файлами. Открытый файл может использоваться для чтения или записей данных. После завершения работы с файлом необходимо закрыть файл, используя его описатель, функцией CloseHandle

Примечание Используйте ссылку по значению ByVal при использовании параметра lpSecurityAttributes равным 0

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

В случае ошибки функция возвращает -1 (используйте GetLastError для получения кода ошибки). В успешном случае функция возвращает описатель открытого или созданного файла или другого объекта.

Параметры

lpFileName
Имя файла или другого объекта
dwDesiredAccess
Комбинация следующих флажков,определяющих права на запись или чтение данных:
GENERIC_READ= &H80000000
Разрешается чтение из файла(объекта)
GENERIC_WRITE = &H40000000
Разрешается запись в файл(объект)
dwShareMode
Комбинация следующих флажков, определяющих права по совместному доступу к файлу(объекту) другими программами:
FILE_SHARE_READ = &H1
Разрешено чтение записей файла другими программами
FILE_SHARE_WRITE = &H2
Разрешена запись в файл другими программами
lpSecurityAppributes
Windows NT, 2000: Структура SECURITY_ATTRIBUTES определяет уровень и тип защиты объекта. Windows 95\98\Me: Параметр равен 0
dwCreationDisposition
Комбинация следующих флажков, определяющих действия,необходимые когда файл существует и когда файл не существует:
CREATE_NEW=1
Создается новый файл(объект). Если указанный файл существует, функция завершается с ошибкой
CREATE_ALWAYS=2
Создается новый файл(объект). Если указанный файл существует, то он переписывается
OPEN_EXISTING=3
Открывается существующий файл. Если указанный файл существует, функция завершается с ошибкой
OPEN_ALWAYS=4
Если указанный файл существует, функция открывает его. Если указанный файл не существует, то он создается
TRUNCATE_EXISTING=5
Открывается существующий файл(объект) с уничтожением его содержимого. Если указанный файл не существует,то функция завершает работу с ошибкой
dwFlagsAndAttributes
Комбинация следующих флажков, определяющих атрибуты и флаги
FILE_ATTRIBUTE_ARCHIVE = &H20
Архивный файл
FILE_ATTRIBUTE_HIDDEN = &H2
Скрытый файл
FILE_ATTRIBUTE_NORMAL = &H80
У файла нет атрибутов(не может комбинироваться с другими атрибутами)
FILE_ATTRIBUTE_READONLY = &H1
Файл только для чтения
FILE_ATTRIBUTE_SYSTEM = &H4
Системный файл,используемый операционной системой
FILE_FLAG_DELETE_ON_CLOSE = &H4000000
Файл удаляется после закрытия.Используется для временных файлов
FILE_FLAG_NO_BUFFERING = &H20000000
Система не буферизирует файловый ввод-вывод
FILE_FLAG_OVERLAPPED = &H40000000
Устанавливается асихронный доступ к файлу(Windows 95, 98, CE: Не поддерживается применительно к файлу). Функция должна использовать структуру OVERLAPPED
FILE_FLAG_POSIX_SEMANTICS = &H1000000
Возможно использование файлов,имена которых различаются регистром букв
FILE_FLAG_RANDOM_ACCESS = &H10000000
Режим кэширования файла оптимизируется для произвольного доступа к файлу
FILE_FLAG_SEQUENTIAL_SCAN = &H8000000
Режим кэширования файла оптимизируется для последовательного доступа к файлу
FILE_FLAG_WRITE_THROUGH = &H80000000
Отключение промежуточного кэширования для снижения вероятности потери данных
hTemplateFile
описатель открытого файла

Пример

' Отобразим дату создания файла D:\readme.txt
Dim hFile As Long  ' описатель открываемого файла
Dim ctime As FILETIME  ' время создания файла
Dim atime As FILETIME  ' время последнего открытия файла
Dim mtime As FILETIME  ' время последнего изменения файла
Dim thetime As SYSTEMTIME ' используем для манипуляций со временем
Dim retval As Long  ' возвращаемое значение

' Сначала, откроем файл D:\readme.txt
hFile = CreateFile("D:\readme.txt", GENERIC_READ, FILE_SHARE_READ, ByVal CLng(0), OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0)
If hFile = -1 Then
  Debug.Print "Невозможно открыть файл"
  End  ' выходим из программы
End If

' Получаем время создания, последнего открытия и изменения файла
retval = GetFileTime(hFile, ctime, atime, mtime)
' Конвертируем время создания в локальное время
retval = FileTimeToLocalFileTime(ctime, ctime)
' Преобразуем формат FILETIME в формат SYSTEMTIME
retval = FileTimeToSystemTime(ctime, thetime)

' Показываем время создания файла
Debug.Print "Файл создан "; thetime.wMonth; "-"; thetime.wDay; "-"; thetime.wYear

' Закрываем файл для освобождения ресурсов
retval = CloseHandle(hFile)

Категория

Файлы

Реклама