c++ - LZ函数的用法不清楚

标签 c++ winapi compression lzw

注意:这个问题是关于Windows LZ函数的,是File Management Functions以前缀 LZ 开头:LZOpenFile、LZCopy、LZClose 等。如果 Google 没记错的话,这些可能是 Windows API 中记录最差的函数之一。

我正在尝试弄清楚哪种文件真正适合与 Windows LZ 功能一起使用。 官方文档提到“使用 Compress.exe 压缩的数据”,但这些函数也能够处理未压缩的文件,在这种情况下不应用解压缩。

现在,当我使用资源工具包中的 compress.exe 实用程序压缩文件时(使用 -Z 或 -ZX 开关),然后使用过程 described here 解压缩它。 ,我得到的只是源文件不变,就好像它没有按预期压缩一样。即使使用来自原始 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;
}

最佳答案

试试compress.exe here没有选项。

除非你需要解压一些旧文件,否则使用DotNetZip相反。

关于c++ - LZ函数的用法不清楚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14033063/

相关文章:

python-3.x - TypeError : on heapq. heapop on python3 但在 python2 中工作

c++ - try block 会保护局部变量的破坏吗?

windows - 使用 Win32/C++ 读取 PNG

java - 调用winapi函数后清空缓冲区

go - 如何从MOVE中正确存储dicom的像素数据?

ios - 压缩或压缩 iOS sqlite 数据库

c++ - 引用变量范围外

c++ - 由于 c++11 错误无法构建 GCC

c++ - 如何使用GMP生成一定范围内的随机数

c++ - 检测手机或相机的插入