LZOpenFileA 函数 (lzexpand.h)

创建、打开、重新打开或删除指定的文件。

语法

INT LZOpenFileA(
  [in]  LPSTR      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_”。 若要确定 (打开的文件的名称(如果有任何) ),请检查 lpReOpenBuf 参数中 OFSTRUCT 结构的 szPathName 成员。

在 Windows 8 和 Windows Server 2012 中,此函数由以下技术支持。

技术 支持
服务器消息块 (SMB) 3.0 协议
SMB 3.0 透明故障转移 (TFO)
具有横向扩展文件共享的 SMB 3.0 (SO)
群集共享卷文件系统 (CSV)
弹性文件系统 (ReFS)
 

CsvF 将对压缩文件执行重定向 IO。

注意

lzexpand.h 标头将 LZOpenFile 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 lzexpand.h (包括 Windows.h)
Library Lz32.lib
DLL Lz32.dll

另请参阅

文件压缩和解压缩

文件管理函数

LZClose

LZInit

LZRead

OFSTRUCT