ZipArchiveExtension.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.IO.Compression;
  5. using System.Linq;
  6. using System.Web;
  7. namespace GreenTree.Nachtragsmanagement.Web.Extensions
  8. {
  9. public static class ZipArchiveExtension
  10. {
  11. /// <summary>
  12. /// Extracts all entries in a zip file to a target directory on the destination file system
  13. /// </summary>
  14. /// <param name="archive">The archive.</param>
  15. /// <param name="destinationDirectoryName">The target directory path.</param>
  16. /// <param name="overwrite">Overwrite existing files.</param>
  17. public static void ExtractToDirectory(this ZipArchive archive, string destinationDirectoryName, bool overwrite)
  18. {
  19. if (!overwrite)
  20. {
  21. archive.ExtractToDirectory(destinationDirectoryName);
  22. return;
  23. }
  24. foreach (var file in archive.Entries)
  25. {
  26. var completeFileName = Path.Combine(destinationDirectoryName, file.FullName);
  27. var directory = Path.GetDirectoryName(completeFileName);
  28. if (!Directory.Exists(directory))
  29. Directory.CreateDirectory(directory);
  30. if (file.Name != "")
  31. {
  32. var memoryStream = file.Open();
  33. File.Delete(completeFileName);
  34. using (var fileStream = new FileStream(completeFileName, FileMode.CreateNew, FileAccess.ReadWrite))
  35. {
  36. memoryStream.CopyTo(fileStream);
  37. }
  38. //file.ExtractToFile(completeFileName, true);
  39. }
  40. }
  41. }
  42. }
  43. }