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


Функция LZOpenFileW (lzexpand.h)

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

Синтаксис

INT LZOpenFileW(
  [in]  LPWSTR     lpFileName,
  [out] LPOFSTRUCT lpReOpenBuf,
  [in]  WORD       wStyle
);

Параметры

[in] lpFileName

Имя файла.

[out] lpReOpenBuf

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

Элемент szPathName этой структуры содержит символы из исходного набора символов изготовителя оборудования (OEM).

[in] wStyle

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

Ценность Значение
OF_CANCEL
0x0800
Игнорировать. Предоставляется только для совместимости с 16-разрядной версией Windows. Используйте стиль OF_PROMPT для отображения диалогового окна, содержащего кнопку Отмена.
OF_CREATE
0x1000
Направляет LZOpenFile для создания нового файла. Если файл уже существует, он усечен до нулевой длины.
OF_DELETE
0x0200
Удаляет файл.
OF_EXIST
0x4000
Открывает файл, а затем закрывает его для проверки существования файла.
OF_PARSE
0x0100
Заполняет структуру OFSTRUCT, но не выполняет никаких других действий.
OF_PROMPT
0x2000
Отображает диалоговое окно, если запрошенный файл не существует. Диалоговое окно сообщает пользователю, что система не может найти файл и содержит кнопки повторных попыток и кнопки "Отмена". Нажатие кнопки "Отмена" направляет LZOpenFile, чтобы вернуть сообщение об ошибке файла.
OF_READ
0x0000
Открывает файл только для чтения.
OF_READWRITE
0x0002
Открывает файл для чтения и записи.
OF_REOPEN
0x8000
Открывает файл с помощью сведений в буфере повторного открытия.
OF_SHARE_DENY_NONE
0x0040
Открывает файл, не запрещая другим процессам доступ на чтение или запись к файлу. LZOpenFile завершается ошибкой, если файл был открыт в режиме совместимости любым другим процессом.
OF_SHARE_DENY_READ
0x0030
Открывает файл и запрещает другим процессам доступ на чтение к файлу. LZOpenFile завершается ошибкой, если файл был открыт в режиме совместимости или открыт для доступа на чтение любым другим процессом.
OF_SHARE_DENY_WRITE
0x0020
Открывает файл и запрещает другим процессам доступ на запись в файл. LZOpenFile завершается ошибкой, если файл был открыт в режиме совместимости или был открыт для записи любым другим процессом.
OF_SHARE_EXCLUSIVE
0x0010
Открывает файл в монопольном режиме, запрещая другим процессам доступ на чтение и запись к файлу. LZOpenFile завершается ошибкой, если файл был открыт в любом другом режиме для доступа на чтение или запись, даже в текущем процессе.
OF_WRITE
0x0001
Открывает файл только для записи.

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

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

Если функция завершается ошибкой, возвращаемое значение является кодом LZERROR_*. Эти коды имеют значения меньше нуля. Для этой функции нет расширенных сведений об ошибке; не вызывайте GetLastError.

примечаниеLZOpenFile не вызывает SetLastError и SetLastErrorEx; Таким образом, его сбой не влияет на код последней ошибки потока.
 
Ниже приведен список кодов ошибок, которые LZOpenFile могут возвращаться после сбоя.
Возврат кода или значения Описание
LZERROR_BADINHANDLE
-1
Дескриптор, определяющий исходный файл, недопустим. Файл не может быть прочитан.
LZERROR_GLOBALLOC
-5
Максимальное количество открытых сжатых файлов было превышено или локальная память не может быть выделена.

Замечания

Если параметр wStyle является флагом OF_READ (или OF_READ и любым из флагов OF_SHARE_*), а файл сжимается, LZOpenFile вызывает функцию LZInit, которая выполняет требуемую инициализацию для операций распаковки.

Дескриптор этой функции возвращается совместим только с функциями в Lz32.dll; Он не должен использоваться для других операций с файлами.

Если LZOpenFile не удается открыть файл, указанный lpFileName, в некоторых версиях Windows он пытается открыть файл с почти тем же именем файла, за исключением последнего символа заменен символом подчеркивания ("_"). Таким образом, если попытка открыть "MyProgram.exe" завершается ошибкой, LZOpenFile пытается открыть "MyProgram.ex_". Пакеты установки часто заменяют символ подчеркивания для последней буквы расширения имени файла, чтобы указать, что файл сжимается. Например, "MyProgram.exe" может называться "MyProgram.ex_". Чтобы определить имя открытого файла (если таковые есть), проверьте элемент szPathName структуры OFSTRUCT в параметре lpReOpenBuf.

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

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

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

Заметка

Заголовок lzexpand.h определяет LZOpenFile как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP [только классические приложения]
минимальный поддерживаемый сервер Windows Server 2003 [только классические приложения]
целевая платформа Виндоус
заголовка lzexpand.h (включая Windows.h)
библиотеки Lz32.lib
DLL Lz32.dll

См. также

сжатия файлов и декомпрессии

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

LZClose

LZInit

LZRead

OFSTRUCT