您的位置:首页 > 编程语言 > C#

【转载】使用C#2.0进行文件压缩和解压

2011-12-05 16:31 573 查看
using System;

using System.IO;

using System.IO.Compression;
public class Zip

{

/// <summary>

/// 压缩

/// </summary>

/// <param name="sourceFile">源文件名,如a.txt</param>

/// <param name="destinationFile">目标文件名,如a.rar</param>

public static void CompressFile(string sourceFile, string destinationFile)

{

if (!File.Exists(sourceFile)) throw new FileNotFoundException();

using (FileStream sourceStream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read))

{

byte [] buffer = new byte[sourceStream.Length];

int checkCounter = sourceStream.Read(buffer, 0, buffer.Length);

if (checkCounter != buffer.Length) throw new ApplicationException();

using (FileStream destinationStream = new FileStream(destinationFile, FileMode.OpenOrCreate, FileAccess.Write))

{

using (GZipStream compressedStream = new GZipStream(destinationStream, CompressionMode.Compress, true))

{

compressedStream.Write(buffer, 0, buffer.Length);

}

}

}

}

/// <summary>

/// 解压缩

/// </summary>

/// <param name="sourceFile">源文件名,如a.rar</param>

/// <param name="destinationFile">目标文件名,如a.txt</param>

public static void DecompressFile(string sourceFile, string destinationFile)

{

if (!File.Exists( sourceFile)) throw new FileNotFoundException();

using (FileStream sourceStream = new FileStream(sourceFile, FileMode.Open))

{

byte [] quartetBuffer = new byte[4];

int position = (int)sourceStream.Length - 4;

sourceStream.Position = position;

sourceStream.Read(quartetBuffer, 0, 4);

sourceStream.Position = 0;

int checkLength = BitConverter.ToInt32(quartetBuffer, 0);

byte[] buffer = new byte[checkLength + 100];

using (GZipStream decompressedStream = new GZipStream(sourceStream, CompressionMode.Decompress, true))

{

int total = 0;

for (int offset = 0; ; )

{

int bytesRead = decompressedStream.Read(buffer, offset, 100);

if (bytesRead == 0) break;

offset += bytesRead;

total += bytesRead;

}

using (FileStream destinationStream = new FileStream(destinationFile, FileMode.Create))

{

destinationStream.Write(buffer, 0, total);

destinationStream.Flush();

}

}

}

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: