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 如果文件已在兼容模式下打开或已被打开以供任何其他进程读取访问,则 LZOpenFile 失败。
OF_SHARE_DENY_WRITE
0x0020
打开该文件并拒绝其他进程对该文件的写入访问权限。 LZOpenFile 如果文件已在兼容模式下打开或已被打开以供任何其他进程进行写入访问,则 LZOpenFile 失败。
OF_SHARE_EXCLUSIVE
0x0010
以独占模式打开文件,拒绝对文件进行读取和写入访问的其他进程。 LZOpenFile 如果在任何其他模式下打开文件进行读取或写入访问,即使当前进程也失败。
OF_WRITE
0x0001
打开文件以仅写入。

返回值

如果函数成功且 wStyle 参数指定的值未 OF_READ,则返回值是标识文件的句柄。 如果文件已压缩并打开,wStyle 设置为 OF_READ,则返回值是一个特殊的文件句柄。

如果函数失败,则返回值为 LZERROR_* 代码。 这些代码的值小于零。 此函数没有扩展的错误信息;请勿调用 getLastError

NoteLZOpenFile既不调用 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) 是的
群集共享卷文件系统 (CsvFS) 是的
可复原文件系统 (ReFS) 是的
 

Csv 将为压缩文件执行重定向的 IO。

注意

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

要求

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

另请参阅

文件压缩和解压缩

文件管理功能

LZClose

LZInit

LZRead

OFSTRUCT