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


Функция 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 Да
Прозрачная отработка отказа (TFO) SMB 3.0 Да
SMB 3.0 с масштабируемыми общими папками (SO) Да
Файловая система общего тома кластера (CSVFS) Да
Восстанавливаемая файловая система (ReFS) Да
 

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

Примечание

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

Требования

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

См. также раздел

Сжатие и распаковка файлов

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

LZClose

LZInit

LZRead

OFSTRUCT