public bool PackageFolder(string folderName, string compressedFileName, bool overrideExisting)
{
if (folderName.EndsWith(@"\"))
folderName = folderName.Remove(folderName.Length - 1);
bool result = false;
if (!Directory.Exists(folderName))
{
return result;
}
if (!overrideExisting && File.Exists(compressedFileName))
{
return result;
}
try
{
using (Package package = Package.Open(compressedFileName, FileMode.Create))
{
var fileList = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories);
foreach (string fileName in fileList)
{
//The path in the package is all of the subfolders after folderName
string pathInPackage;
pathInPackage = Path.GetDirectoryName(fileName).Replace(folderName, string.Empty) + "/" + Path.GetFileName(fileName);
Uri partUriDocument = PackUriHelper.CreatePartUri(new Uri(pathInPackage, UriKind.Relative));
PackagePart packagePartDocument = package.CreatePart(partUriDocument, "", CompressionOption.Maximum);
using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
fileStream.CopyTo(packagePartDocument.GetStream());
}
}
}
result = true;
}
catch (Exception e)
{
throw new Exception("Error zipping folder " + folderName, e);
}
return result;
}
/// <summary>
/// 压缩文件夹
/// </summary>
/// <param name="FilePath">需要压缩文件夹路径</param>
/// <param name="FileName">压缩后文件名</param>
/// <param name="SavePath">压缩后存放路径</param>
/// <param name="PassWord">压缩密码,null为无密码</param>
/// <returns>异常消息,成功返回null</returns>
public string SetZipFile(List<string> FilePath, string FileName, string SavePath, string PassWord)
{
try
{
ZipFile zipfile = new ZipFile(SavePath + "\\" + FileName + ".zip", Encoding.Default);
if (PassWord != string.Empty)
zipfile.Password = PassWord;
foreach (var path in FilePath)
{
zipfile.AddDirectory(path);
zipfile.Save();
}
}
catch (Exception ex)
{
return ex.ToString();
}
return null;
}