ZipClient.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using System.IO;
  2. using MediaBrowser.Model.IO;
  3. using SharpCompress.Common;
  4. using SharpCompress.Readers;
  5. using SharpCompress.Readers.GZip;
  6. namespace Emby.Server.Implementations.Archiving
  7. {
  8. /// <summary>
  9. /// Class DotNetZipClient.
  10. /// </summary>
  11. public class ZipClient : IZipClient
  12. {
  13. /// <inheritdoc />
  14. public void ExtractAllFromGz(Stream source, string targetPath, bool overwriteExistingFiles)
  15. {
  16. using var reader = GZipReader.Open(source);
  17. var options = new ExtractionOptions
  18. {
  19. ExtractFullPath = true,
  20. Overwrite = overwriteExistingFiles
  21. };
  22. Directory.CreateDirectory(targetPath);
  23. reader.WriteAllToDirectory(targetPath, options);
  24. }
  25. /// <inheritdoc />
  26. public void ExtractFirstFileFromGz(Stream source, string targetPath, string defaultFileName)
  27. {
  28. using var reader = GZipReader.Open(source);
  29. if (reader.MoveToNextEntry())
  30. {
  31. var entry = reader.Entry;
  32. var filename = entry.Key;
  33. if (string.IsNullOrWhiteSpace(filename))
  34. {
  35. filename = defaultFileName;
  36. }
  37. reader.WriteEntryToFile(Path.Combine(targetPath, filename));
  38. }
  39. }
  40. }
  41. }