下面的代碼可以幫助你們。實例化對象並使用這些函數。
public class FileCompressionUtility
{
public FileCompressionUtility()
{
}
public static void CopyStream(System.IO.Stream input, System.IO.Stream output)
{
byte[] buffer = new byte[2000];
int len;
while ((len = input.Read(buffer, 0, 2000)) > 0)
{
output.Write(buffer, 0, len);
}
output.Flush();
}
public void compressFile(string inFile, string outFile)
{
System.IO.FileStream outFileStream = new System.IO.FileStream(outFile, System.IO.FileMode.Create);
zlib.ZOutputStream outZStream = new zlib.ZOutputStream(outFileStream, zlib.zlibConst.Z_DEFAULT_COMPRESSION);
System.IO.FileStream inFileStream = new System.IO.FileStream(inFile, System.IO.FileMode.Open);
try
{
CopyStream(inFileStream, outZStream);
}
finally
{
outZStream.Close();
outFileStream.Close();
inFileStream.Close();
}
}
public void uncompressFile(string inFile, string outFile)
{
int data = 0;
int stopByte = -1;
System.IO.FileStream outFileStream = new System.IO.FileStream(outFile, System.IO.FileMode.Create);
zlib.ZInputStream inZStream = new zlib.ZInputStream(System.IO.File.Open(inFile, System.IO.FileMode.Open, System.IO.FileAccess.Read));
while (stopByte != (data = inZStream.Read()))
{
byte _dataByte = (byte)data;
outFileStream.WriteByte(_dataByte);
}
inZStream.Close();
outFileStream.Close();
}
}
要處理的gzip/zlib的/放氣的壓縮文件,即使壓縮數據文件的開始中,我發現了[offzip](http://aluigi.altervista.org/mytoolz.htm# offzip)工具[在reverseengineering.se上提到](https://reverseengineering.stackexchange.com/questions/1463/are-there-any-tools-or-scripts-for-identifying-compression-algorithms-in-executa)有用。它會查找並提取壓縮的流,而不管它們在文件中的起始位置。使用正確的命令行參數,如果它是一個沒有標題的純壓縮流標記它。 – CodesInChaos 2015-12-07 16:32:53