1. 程式人生 > 實用技巧 >ICSharpCode.SharpZipLib C# 壓縮資料夾SharpZipHelper

ICSharpCode.SharpZipLib C# 壓縮資料夾SharpZipHelper

sharpZip自帶簡單的方式:

 public static void CompressDirectory(string inputDirectory, string outputFile)

        {
            var fast = new FastZip();
            fast.CreateEmptyDirectories = true;
            fast.CreateZip(outputFile, inputDirectory, true, string.Empty);
        }


        public static
void DecompressDirectory(string inputFile, string outputDirectory) { var fast = new FastZip(); fast.CreateEmptyDirectories = true; fast.ExtractZip(inputFile, outputDirectory, string.Empty); }

自定義的方式:

  public static void UnZipFile(string inputFile, string
outputDir) { if (string.IsNullOrEmpty(outputDir)) { return; } if (outputDir.Last() != '\\') { outputDir += "\\"; } using (var s = new ZipInputStream(File.OpenRead(inputFile))) { ZipEntry theEntry;
while ((theEntry = s.GetNextEntry()) != null) { var directoryName = Path.GetDirectoryName(theEntry.Name); var fileName = Path.GetFileName(theEntry.Name); if (!string.IsNullOrEmpty(directoryName)) { Directory.CreateDirectory(outputDir + directoryName); } if (fileName != string.Empty) { using (var streamWriter = File.Create(outputDir + theEntry.Name)) { var size = 0; var data = new byte[20480]; while (true) { size = s.Read(data, 0, data.Length); if (size > 0) { streamWriter.Write(data, 0, size); } else { break; } } } } } } } public static void ZipFolder(string inputFolder, string outputZipFile) { using (var s = new ZipOutputStream(File.Create(outputZipFile))) { s.SetLevel(6); Compress(inputFolder, inputFolder, s); s.Finish(); s.Close(); } } private static void Compress(string dirPath, string originalDir, ZipOutputStream s) { var fileNames = Directory.GetFiles(dirPath); var folders = Directory.GetDirectories(dirPath); var buffer = new byte[40960]; foreach (var file in fileNames) { var entryDir = dirPath.Replace(originalDir, "").TrimStart('\\'); var entry = new ZipEntry(entryDir + Path.GetFileName(file)); entry.DateTime = DateTime.Now; s.PutNextEntry(entry); using (var fs = File.OpenRead(file)) { int sourceBytes; do { sourceBytes = fs.Read(buffer, 0, buffer.Length); s.Write(buffer, 0, sourceBytes); } while (sourceBytes > 0); } } foreach (var folder in folders) { var entryDir = folder.Replace(originalDir, "").TrimStart('\\'); if (entryDir.Last()!='\\'&&entryDir.Last()!='/') { entryDir += "/"; } var entry = new ZipEntry(entryDir); entry.DateTime = DateTime.Now; s.PutNextEntry(entry); Compress(folder, originalDir, s); } }