using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ICSharpCode.SharpZipLib.Zip;
using System.IO;
namespace A
{
public class ZipHelper
{
static readonly List<char> badFileNameChars = new List<char>((@"//:*?|""<>|").ToCharArray());
/// <summary>
/// 过虑文件名非法字符
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static String FixBadFile(String fileName)
{
StringBuilder sb = new StringBuilder();
foreach (char c in fileName)
{
if (!badFileNameChars.Contains(c))
{
sb.Append(c);
}
}
return sb.ToString();
}
/// <summary>
/// 打包文件夹
/// </summary>
/// <param name="outZipFileFullName"></param>
/// <param name="zipFolder"></param>
/// <returns></returns>
public static string ZipFolder(string outZipFileFullName, string zipFolder)
{
string result = string.Empty;
if (Directory.Exists(zipFolder))
{
try
{
string[] filenames = Directory.GetFiles(zipFolder);
if (filenames != null && filenames.Length > 0)
{
string zipFilePath = outZipFileFullName;
if (!zipFilePath.EndsWith(".zip"))
zipFilePath += ".zip";
result = zipFilePath;
using (ZipOutputStream s = new ZipOutputStream(File.Create(zipFilePath)))
{
s.SetLevel(9); // 压缩级别 0-9
byte[] buffer = new byte[4096]; //缓冲区大小
for (int index = 0; index < filenames.Length; index++)
{
string file = filenames[index];
ZipEntry entry = new ZipEntry(Path.GetFileName(file));
entry.DateTime = DateTime.Now;
s.PutNextEntry(entry);
using (FileStream fs = File.OpenRead(file))
{
int sourceBytes;
do
{
sourceBytes = fs.Read(buffer, 0, buffer.Length);
s.Write(buffer, 0, sourceBytes);
} while (sourceBytes > 0);
}
}
s.Finish();
s.Close();
}
}
}
catch (Exception ex)
{
result = ex.Message;
}
}
return result;
}
/// <summary>
/// 删除目录
/// </summary>
/// <param name="folder"></param>
/// <returns></returns>
public static string DirectoryDelete(string folder)
{
string result = string.Empty;
try
{
if (Directory.Exists(folder))
Directory.Delete(folder, true);
}
catch (Exception ex)
{
result = ex.Message;
}
return result;
}
}
}