注意:这个问题是关于 Windows LZ 函数的,它们是以前缀 LZ 开头的文件管理函数:LZOpenFile、LZCopy、LZClose 等。如果 Google 没有错,这些可能是 Windows API 中文档记录最差的函数之一.
我试图弄清楚哪种文件实际上适合与 Windows LZ 函数一起使用。官方文档提到“使用 Compress.exe 压缩的数据”,但这些函数也能够处理未压缩的文件,在这种情况下不应用解压缩。
现在,当我使用资源工具包中的 compress.exe 实用程序压缩文件(使用 -Z 或 -ZX 开关),然后使用此处描述的过程对其进行解压缩时,我得到的只是源文件未更改,就好像它没有按预期压缩。即使使用原始 Windows XP 安装 CD 中的压缩文件(在 i386 文件夹末尾带有下划线的文件),我也得到相同的结果。结论:无论我尝试解压缩什么文件,我都会将其恢复原状。
我使用的代码非常简单,它基本上重现了 MSDN 文章中描述的步骤,所以如果我有错误,我想它一定是在其他地方。但我仍然倾向于认为我只是使用了错误的输入文件。有没有人对这些 LZ 功能有任何经验?这是我的 C++ 代码。
#include <iostream>
#include <Windows.h>
using namespace std;
int main(int argc, char ** argv) {
OFSTRUCT ofs1, ofs2;
INT hfSrc = -1, hfDest = -1;
if (argc <= 2) {
cerr << "Usage: LZTEST Source Destination";
return 1;
}
__try {
hfSrc = LZOpenFile(argv[1], &ofs1, OF_READ);
if (hfSrc < 0) {
cerr << "Error invoking LZOpenFile on source file: " << hfSrc;
return 1;
}
hfDest = LZOpenFile(argv[2], &ofs2, OF_CREATE);
if (hfDest < 0) {
cerr << "Error invoking LZOpenFile on destination file: " << hfDest;
return 1;
}
INT result = LZCopy(hfSrc, hfDest);
if (result < 0) {
cerr << "Error invoking LZCopy: " << result;
return 1;
}
} __finally {
if (hfSrc >= 0) LZClose(hfSrc);
if (hfDest >= 0) LZClose(hfDest);
}
cout << "Success";
return 0;
}