Поделиться через


Функция OpenFile (winbase.h)

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

Примечание Эта функция имеет ограниченные возможности и не рекомендуется. Для разработки новых приложений используйте функцию CreateFile .
 

Синтаксис

HFILE OpenFile(
  [in]  LPCSTR     lpFileName,
  [out] LPOFSTRUCT lpReOpenBuff,
  [in]  UINT       uStyle
);

Параметры

[in] lpFileName

Имя файла.

Строка должна состоять из символов из 8-разрядной кодировки Windows. Функция OpenFile не поддерживает имена файлов в Юникоде или открытие именованных каналов.

[out] lpReOpenBuff

Указатель на структуру OFSTRUCT , которая получает сведения о файле при его первом открытии.

Структура может использоваться в последующих вызовах функции OpenFile для просмотра открытого файла.

Структура OFSTRUCT содержит элемент строки пути, длина которой ограничена OFS_MAXPATHNAME символами, которая составляет 128 символов. Из-за этого нельзя использовать функцию OpenFile для открытия файла с длиной пути, превышающей 128 символов. Функция CreateFile не имеет этого ограничения на длину пути.

[in] uStyle

Выполняемое действие.

Этот параметр может быть одним или несколькими из следующих значений.

Значение Значение
OF_CANCEL
0x00000800
Не обрабатывается.

Чтобы создать диалоговое окно с кнопкой Отмена , используйте OF_PROMPT.

OF_CREATE
0x00001000
Создает новый файл.

Если файл существует, он усекается до нулевой (0) длины.

OF_DELETE
0x00000200
Удаляет файл.
OF_EXIST
0x00004000
Открывает файл, а затем закрывает его.

Используйте его для проверки наличия файла.

OF_PARSE
0x00000100
Заполняет структуру OFSTRUCT , но не выполняет никаких других действий.
OF_PROMPT
0x00002000
Отображает диалоговое окно, если запрошенный файл не существует.

Диалоговое окно сообщает пользователю, что система не может найти файл и содержит кнопки Повтор и Отмена . Кнопка Отмена указывает OpenFile на возврат сообщения об ошибке о том, что файл не найден.

OF_READ
0x00000000
Открывает файл только для чтения.
OF_READWRITE
0x00000002
открывает файл с разрешениями для чтения и записи.
OF_REOPEN
0x00008000
Открывает файл с помощью сведений в буфере повторного открытия.
OF_SHARE_COMPAT
0x00000000
Для файловых систем на основе MS-DOS открывает файл в режиме совместимости, что позволяет любому процессу на указанном компьютере открывать файл любое количество раз.

Другие попытки открыть файл с другими режимами общего доступа завершаются сбоем. Этот флаг сопоставляется с флагами FILE_SHARE_READ|FILE_SHARE_WRITE функции CreateFile .

OF_SHARE_DENY_NONE
0x00000040
Открывает файл без запрета на чтение или запись для других процессов.

Если в файловых системах на основе MS-DOS файл был открыт в режиме совместимости любым другим процессом, функция завершается ошибкой.

Этот флаг сопоставляется с флагами FILE_SHARE_READ|FILE_SHARE_WRITE функции CreateFile .

OF_SHARE_DENY_READ
0x00000030
Открывает файл и запрещает доступ на чтение к другим процессам.

В файловых системах на основе MS-DOS, если файл был открыт в режиме совместимости или для доступа на чтение любым другим процессом, функция завершается сбоем.

Этот флаг сопоставляется с флагом FILE_SHARE_WRITE функции CreateFile .

OF_SHARE_DENY_WRITE
0x00000020
Открывает файл и запрещает доступ на запись к другим процессам.

В файловых системах на основе MS-DOS, если файл был открыт в режиме совместимости или для доступа на запись любым другим процессом, функция завершается сбоем.

Этот флаг сопоставляется с флагом FILE_SHARE_READ функции CreateFile .

OF_SHARE_EXCLUSIVE
0x00000010
Открывает файл в монопольном режиме и запрещает доступ для чтения и записи к другим процессам. Если файл был открыт в любом другом режиме для чтения и записи, даже текущим процессом, функция завершается ошибкой.
OF_VERIFY
Проверяет, совпадают ли дата и время файла, когда он был открыт ранее.

Это полезно в качестве дополнительного проверка для файлов, доступных только для чтения.

OF_WRITE
0x00000001
открывает файл только для записи.

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

Если функция выполняется успешно, возвращаемое значение указывает дескриптор файла, используемый при выполнении операций ввода-вывода файла. Чтобы закрыть файл, вызовите функцию CloseHandle , используя этот дескриптор.

Если функция завершается сбоем, возвращаемое значение будет HFILE_ERROR. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Если параметр lpFileName указывает только имя файла и расширение, эта функция ищет соответствующий файл в следующих каталогах в указанном порядке:

  1. Каталог, в который загружается приложение.
  2. Текущий каталог.
  3. Системный каталог Windows.

    Используйте функцию GetSystemDirectory , чтобы получить путь к этому каталогу.

  4. 16-разрядный системный каталог Windows.

    Функция, извлекающая путь к этому каталогу, не существует, но выполняется поиск.

  5. Каталог Windows.

    Используйте функцию GetWindowsDirectory , чтобы получить путь к этому каталогу.

  6. Каталоги, перечисленные в переменной среды PATH.
Параметр lpFileName не может содержать подстановочные знаки.

Функция OpenFile не поддерживает флаг OF_SEARCH , поддерживаемый 16-разрядной функцией Windows OpenFile . Флаг OF_SEARCH указывает системе на поиск соответствующего файла, даже если имя файла содержит полный путь. Используйте функцию SearchPath для поиска файла.

Нарушение общего доступа возникает, если предпринимается попытка открыть файл или каталог для удаления на удаленном компьютере, если значение параметра uStyle является OF_DELETE флагом доступа OR'ed с любым другим флагом доступа, а удаленный файл или каталог не были открыты с FILE_SHARE_DELETE общего доступа. Чтобы избежать нарушения общего доступа в этом сценарии, откройте удаленный файл или каталог только с OF_DELETE доступом или вызовите Метод DeleteFile , не открывая файл или каталог для удаления.

В Windows 8 и Windows Server 2012 эта функция поддерживается следующими технологиями.

Технология Поддерживается
Протокол SMB 3.0 Да
SMB 3.0 Transparent Failover (TFO) Да
SMB 3.0 с масштабируемыми общими папками (SO) Да
Файловая система общего тома кластера (CSVFS) Да
Восстанавливаемая файловая система (ReFS) Да
 

CsvFs выполняет перенаправление операций ввода-вывода для сжатых файлов.

Требования

   
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header winbase.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

CreateFile

Функции управления файлами

GetSystemDirectory

GetWindowsDirectory

OFSTRUCT

SearchPath