分享"SharpZipLip使用代码"
zip类
public class ZipClass
{
/**//// <summary>
/// 压缩方法
/// </summary>
/// <param name="strPath">要压缩文件夹</param>
/// <param name="strFileName">生成的文件名</param>
/// <param name="PassWord">密码</param>
/// <returns>1 成功 -1输入的压缩文件夹为空 -2 输入的压缩文件夹目录不存在!</returns>
public static int Zip(string strPath, string strFileName, string PassWord)
{
if (!String.IsNullOrEmpty(strPath))
{
//throw new Exception("输入的压缩文件夹为空");
return -1;
}
if (!Directory.Exists(strPath))
{
//throw new Exception("输入的压缩文件夹目录不存在!");
return -2;
}
if (!File.Exists(strFileName))
{
File.Create(strFileName);
}
ZipOutputStream zip = new ZipOutputStream(File.Create(strFileName));
if (!string.IsNullOrEmpty(PassWord))
zip.Password = PassWord;
IList<FileInfo> list = new List<FileInfo>();
GetFileList(strPath, list);
try
{
byte[] buffer = new byte[2048];
int count = 0;
foreach (FileInfo fi in list)
{
count = 0;
using (FileStream fs = File.OpenRead(fi.FullName))
{
ZipEntry entry = new ZipEntry(fi.FullName.Substring(strPath.Length + 1));
entry.DateTime = fi.LastWriteTime;
entry.Size = fs.Length;
zip.PutNextEntry(entry);
while ((count = fs.Read(buffer, 0, 2048)) > 0)
{
zip.Write(buffer, 0, count);
}
}
}
}
catch
{
throw;
}
finally
{
zip.Finish();
zip.Close();
}
return 1;
}
private static void GetFileList(string strPath, IList<FileInfo> list)
{
DirectoryInfo di = new DirectoryInfo(strPath);
foreach (DirectoryInfo di1 in di.GetDirectories())
{
GetFileList(di1.FullName, list);
}
foreach (FileInfo fi in di.GetFiles())
{
list.Add(fi);
}
}
/**//// <summary>
/// 解压缩文件
/// </summary>
/// <param name="strFileName">压缩文件</param>
/// <param name="strPath">目标目录</param>
/// <param name="PassWord">密码</param>
/// <returns>1 成功 -1输入的压缩文件夹为空 -2 输入的解压缩文件夹目录不存在!-3 文件不存在</returns>
public static int UnZip(string strFileName, string strPath, string PassWord)
{
if (!String.IsNullOrEmpty(strPath))
{
//throw new Exception("输入的压缩文件夹为空");
return -1;
}
if (!Directory.Exists(strPath))
{
//throw new Exception("输入的压缩文件夹目录不存在!");
return -2;
}
if (!File.Exists(strFileName))
{
//throw new Exception("文件:" + strFileName + "不存在!");
return -3;
}
ZipEntry entry;
ZipInputStream zis = null;
try
{
zis = new ZipInputStream(File.Open(strFileName, FileMode.Open));
if (!string.IsNullOrEmpty(PassWord))
zis.Password = PassWord;
byte[] buffer = new byte[2048];
int count = 0;
while ((entry = zis.GetNextEntry()) != null)
{
CreateDirList(entry.Name, strPath);
string strPath1 = strPath + "\\" + entry.Name;
using (FileStream streamWriter = File.Create(strPath1))
{
while ((count = zis.Read(buffer, 0, 2048)) > 0)
{
streamWriter.Write(buffer, 0, count);
}
}
File.SetLastWriteTime(strPath1, entry.DateTime);
}
}
catch
{
throw;
}
finally
{
if (zis != null)
zis.Close();
}
return 1;
}
private static void CreateDirList(string filename, string basePath)
{
string dirName = basePath;
string[] dirlevelname = filename.Split('\\');
for (int i = 0; i < dirlevelname.Length - 1; i++)
{
dirName += "\\" + dirlevelname[i];
if (Directory.Exists(dirName))
{
continue;
}
Directory.CreateDirectory(dirName);
}
}
}
没有什么说的,直接上代码.
public class ZipClass
{
/**//// <summary>
/// 压缩方法
/// </summary>
/// <param name="strPath">要压缩文件夹</param>
/// <param name="strFileName">生成的文件名</param>
/// <param name="PassWord">密码</param>
/// <returns>1 成功 -1输入的压缩文件夹为空 -2 输入的压缩文件夹目录不存在!</returns>
public static int Zip(string strPath, string strFileName, string PassWord)
{
if (!String.IsNullOrEmpty(strPath))
{
//throw new Exception("输入的压缩文件夹为空");
return -1;
}
if (!Directory.Exists(strPath))
{
//throw new Exception("输入的压缩文件夹目录不存在!");
return -2;
}
if (!File.Exists(strFileName))
{
File.Create(strFileName);
}
ZipOutputStream zip = new ZipOutputStream(File.Create(strFileName));
if (!string.IsNullOrEmpty(PassWord))
zip.Password = PassWord;
IList<FileInfo> list = new List<FileInfo>();
GetFileList(strPath, list);
try
{
byte[] buffer = new byte[2048];
int count = 0;
foreach (FileInfo fi in list)
{
count = 0;
using (FileStream fs = File.OpenRead(fi.FullName))
{
ZipEntry entry = new ZipEntry(fi.FullName.Substring(strPath.Length + 1));
entry.DateTime = fi.LastWriteTime;
entry.Size = fs.Length;
zip.PutNextEntry(entry);
while ((count = fs.Read(buffer, 0, 2048)) > 0)
{
zip.Write(buffer, 0, count);
}
}
}
}
catch
{
throw;
}
finally
{
zip.Finish();
zip.Close();
}
return 1;
}
private static void GetFileList(string strPath, IList<FileInfo> list)
{
DirectoryInfo di = new DirectoryInfo(strPath);
foreach (DirectoryInfo di1 in di.GetDirectories())
{
GetFileList(di1.FullName, list);
}
foreach (FileInfo fi in di.GetFiles())
{
list.Add(fi);
}
}
/**//// <summary>
/// 解压缩文件
/// </summary>
/// <param name="strFileName">压缩文件</param>
/// <param name="strPath">目标目录</param>
/// <param name="PassWord">密码</param>
/// <returns>1 成功 -1输入的压缩文件夹为空 -2 输入的解压缩文件夹目录不存在!-3 文件不存在</returns>
public static int UnZip(string strFileName, string strPath, string PassWord)
{
if (!String.IsNullOrEmpty(strPath))
{
//throw new Exception("输入的压缩文件夹为空");
return -1;
}
if (!Directory.Exists(strPath))
{
//throw new Exception("输入的压缩文件夹目录不存在!");
return -2;
}
if (!File.Exists(strFileName))
{
//throw new Exception("文件:" + strFileName + "不存在!");
return -3;
}
ZipEntry entry;
ZipInputStream zis = null;
try
{
zis = new ZipInputStream(File.Open(strFileName, FileMode.Open));
if (!string.IsNullOrEmpty(PassWord))
zis.Password = PassWord;
byte[] buffer = new byte[2048];
int count = 0;
while ((entry = zis.GetNextEntry()) != null)
{
CreateDirList(entry.Name, strPath);
string strPath1 = strPath + "\\" + entry.Name;
using (FileStream streamWriter = File.Create(strPath1))
{
while ((count = zis.Read(buffer, 0, 2048)) > 0)
{
streamWriter.Write(buffer, 0, count);
}
}
File.SetLastWriteTime(strPath1, entry.DateTime);
}
}
catch
{
throw;
}
finally
{
if (zis != null)
zis.Close();
}
return 1;
}
private static void CreateDirList(string filename, string basePath)
{
string dirName = basePath;
string[] dirlevelname = filename.Split('\\');
for (int i = 0; i < dirlevelname.Length - 1; i++)
{
dirName += "\\" + dirlevelname[i];
if (Directory.Exists(dirName))
{
continue;
}
Directory.CreateDirectory(dirName);
}
}
}