第一种方法:
用ZLib库里的TZCompressionStream、TZDecompressionStream,缺点是只能对单个文件进行压缩、压缩后不能用WinRar这些软件打开,例子如下:
压缩:
TFileStream *input = new TFileStream("E:\\test.wav", fmOpenRead);
TFileStream *output = new TFileStream("E:\\test.zip", fmCreate);
// 注意各个RAD XE版本里的TZCompressionStream的构造函数有区别
// TZCompressionStream *zip = new TZCompressionStream(output);
TZCompressionStream *zip = new TZCompressionStream(TCompressionLevel::clMax, output);
zip->CopyFrom(input, input->Size);
delete zip;
delete input;
delete output;
解压:
TFileStream *input = new TFileStream("E:\\test.zip", fmOpenRead);
TFileStream *output = new TFileStream("E:\\test2.wav", fmCreate);
TZDecompressionStream *unzip = new TZDecompressionStream(input);
output->CopyFrom(unzip, 0);
delete unzip;
delete input;
delete output;
第二种方法:
用TZipFile类,缺省只能用TZipCompression::zcStored、TZipCompression::zcDeflate这2种模式,TZipCompression的其它模式可能要注册自己写的回调函数
压缩整个目录:
TZipFile::ZipDirectoryContents("E:\\Log1.zip", "E:\\Tmp\\LOG");
压缩单个或多个文件:
String ZipFile = "E:\\Log.zip";
String File1 = "E:\\Tmp\\LOG\\file1.log";
String File2 = "E:\\Tmp\\LOG\\file2.log";
TZipFile * zip = new TZipFile();
zip->Open(ZipFile, TZipMode::zmWrite);
zip->Add(File1, "log1.log");
zip->Add(File2, "log2.log");
zip->Close();
delete zip;
解压全部文件:
使用TZipFile的ExtractAll函数
解压单个文件:
使用TZipFile的Extract函数