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
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
相关文章推荐
- C#实现Zip压缩目录中所有文件的方法
- 在python中使用zipfile压缩文件时层级很多,有很多层目录,但是需要去除这些层级目录
- C#文件的压缩和解压(ZIP)使用DotNetZip封装类操作zip文件(创建/读取/更新)实例
- 使用C#压缩/解压缩7-zip文件
- zip与unzip命令谅解及,压缩文件但不包含某目录的操作。
- java实现zip压缩多个目录及子目录和文件
- 用VBScript实现Zip压缩目录中的所有文件
- C#操作压缩文件(rar,zip,gzip,winform/asp.net)
- Java实现Zip压缩/解压缩目录中的所有文件
- Java 把文件/目录压缩成zip文件
- golang zip 压缩,解压(含目录文件)
- C#压缩解压zip 文件
- C#压缩解压zip 文件
- C#执行zip文件压缩的几种方法及我遇到的坑总结
- python基础-文件目录压缩(zipfile模块)
- C# 下利用ICSharpCode.SharpZipLib.dll实现文件/目录压缩、解压缩
- 7-zip 把当前目录下所有的文件压缩成zip,同时不包含档案目录文件
- C#压缩解压zip 文件
- Mac中命令行zip压缩文件或者目录时,取出隐藏文件和系统文件的方法
- 通过 C# 使用 J# 类库中的 Zip 类压缩文件和数据