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

C# ZIP 目录文件压缩

2011-03-31 14:04 357 查看
1.项目导入sharpziplib.dll

using ICSharpCode.SharpZipLib;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Checksums;

#region 压缩目录文件

public static string CompressDirectory(string directory, string outputFileName)
{
return CompressDirectory(directory, outputFileName, null);
}

public static string CompressDirectory(string directory, string outputFileName, string password)
{
ArrayList fileList = PopulateFileList(directory);
int parentDirectoryNameLength = (Directory.GetParent(directory)).ToString().Length;

//remove the last'/'
parentDirectoryNameLength += 1;

byte[] buffer;
string outPath = directory + @"/" + outputFileName;
FileStream fileStream = null;
// create zip stream
using (ZipOutputStream zipStream = new ZipOutputStream(File.Create(outPath)))
{
try
{
if (!string.IsNullOrEmpty(password))
{
zipStream.Password = password;
}

zipStream.SetLevel(6); // compress level 0---9

ZipEntry zipEntity = null;

foreach (string fileName in fileList)
{
zipEntity = new ZipEntry(fileName.Remove(0, parentDirectoryNameLength));
zipStream.PutNextEntry(zipEntity);

//it is really a file
if (!fileName.EndsWith(@"/"))
{
fileStream = File.OpenRead(fileName);
buffer = new byte[fileStream.Length];
fileStream.Read(buffer, 0, buffer.Length);
zipStream.Write(buffer, 0, buffer.Length);
}
}

}
catch (Exception)
{

}
finally
{
fileStream.Close();
fileStream.Dispose();
zipStream.Finish();
zipStream.Close();
zipStream.Dispose();
}

}
return outPath;
}

private static ArrayList PopulateFileList(string directory)
{
ArrayList filesList = new ArrayList();
bool isEmpty = true;
foreach (string file in Directory.GetFiles(directory)) // add each file in directory
{
filesList.Add(file);
isEmpty = false;
}

// all subcategory was added
if (isEmpty)
{
if (Directory.GetDirectories(directory).Length == 0)
{
filesList.Add(directory + @"/");
}
}

// recursive
foreach (string dirs in Directory.GetDirectories(directory))
{
foreach (object obj in PopulateFileList(dirs))
{
filesList.Add(obj);
}
}
return filesList;
}
#endregion
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: