using System.IO;
using System.IO.Compression;
/// <summary>
/// 压缩单个文件
/// </summary>
/// <param name="filePath">将要被压缩的文件完整名</param>
public void Compress(string srcFileName)
{
string destFileName = srcFileName + ".zip";
try
{
int iZipLen = 1024 * 1024;
FileStream fsReader = new FileStream(srcFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
FileStream fsWriter = new FileStream(destFileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
GZipStream gZip = new GZipStream(fsWriter, CompressionMode.Compress);
byte[] buffer = new byte[2 * iZipLen];
int iReadLen = 0;
do
{
//从源文件中读出数据
iReadLen = fsReader.Read(buffer, 0, buffer.Length);
if (iReadLen == 0) break;
//写入压缩文件
gZip.Write(buffer, 0, iReadLen);
}
while (true);
//关闭资源
gZip.Close();
gZip = null;
fsWriter.Close();
fsWriter = null;
fsReader.Close();
fsReader = null;
}
catch
{
if (File.Exists(destFileName))
{
File.Delete(destFileName);
}
throw new Exception("压缩文件出错!");
}
}
/// <summary>
/// 解压单个文件
/// </summary>
/// <param name="filePath">将要被解压的文件完整名</param>
public void Decompress(string srcFileName)
{
string destFileName = srcFileName.Remove(srcFileName.Length - 4);
try
{
int iZipLen = 1024 * 1024;
FileStream fsReader = new FileStream(srcFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
FileStream fsWriter = new FileStream(destFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
GZipStream gZip = new GZipStream(fsReader, CompressionMode.Decompress, false);
byte[] buffer = new byte[2 * iZipLen];
int iReadLen = 0;
do
{
//从源文件中读出数据
iReadLen = gZip.Read(buffer, 0, buffer.Length);
if (iReadLen == 0) break;
//解压缩写入目的文件
fsWriter.Write(buffer, 0, iReadLen);
}
while (true);
//关闭资源
gZip.Close();
gZip = null;
fsWriter.Close();
fsWriter = null;
fsReader.Close();
fsReader = null;
}
catch
{
if (File.Exists(destFileName))
{
File.Delete(destFileName);
}
throw new Exception("解压缩文件出错!");
}
}
上面两个文件只针对单个文件的压缩和解压。对于压缩后的文件名为 当前文件的文件命名+"zip" 。