c – 关于LZ功能使用的不明确性

注意:这个问题是关于 Windows LZ函数,它们是以前缀LZ开头的 File Management Functions:LZOpenFile,LZcopy,LZClose等.如果谷歌没有错,这些可能是Windows API中记录最差的函数之一.

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

现在,当我使用资源工具包中的compress.exe实用程序压缩文件(使用-Z或-ZX开关),然后使用过程described here解压缩时,我得到的只是源文件不变,就好像它一样未按预期压缩.即使使用原始Windows XP安装光盘中的压缩文件(在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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...