注:この質問は、プレフィックスLZで始まるファイル管理関数であるWindows LZ関数に関するものです:LZOpenFile、LZCopy、LZCloseなど。Googleが間違っていない場合、これらはおそらくWindowsAPIの最も文書化されていない関数の1つです。 。
WindowsのLZ関数での使用に実際に適しているファイルの種類を見つけようとしています。公式ドキュメントには「Compress.exeを使用して圧縮されたデータ」と記載されていますが、関数は非圧縮ファイルも処理できます。この場合、解凍は適用されません。
ここで、リソースキットのcompress.exeユーティリティを使用してファイルを圧縮し(-Zまたは-ZXスイッチのいずれかを使用)、ここで説明する手順を使用して解凍すると、ソースファイルは変更されていないかのようになります。期待どおりに圧縮されませんでした。元のWindowsXPセットアップ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;
}