ExtractFile.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using SharpCompress.Archives;
  2. using SharpCompress.Archives.Rar;
  3. using SharpCompress.Common;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.IO.Compression;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace wispro.sp.winClient
  12. {
  13. public class ExtractFileUtil
  14. {
  15. public static void ExtractZip(string zipFilePath, string extractPath)
  16. {
  17. Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
  18. // 确保提取目录存在
  19. Directory.CreateDirectory(extractPath);
  20. // 使用 ZipArchive 解压缩 ZIP 文件
  21. using (FileStream zipToOpen = new FileStream(zipFilePath, FileMode.Open))
  22. {
  23. using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Read, true, Encoding.GetEncoding("GB2312")))
  24. {
  25. foreach (ZipArchiveEntry entry in archive.Entries)
  26. {
  27. if (entry.FullName.EndsWith("/", StringComparison.Ordinal) || entry.FullName.EndsWith("\\", StringComparison.Ordinal))
  28. {
  29. Console.WriteLine($"目录: {entry.FullName}");
  30. }
  31. else
  32. {
  33. string entryPath = Path.Combine(extractPath, entry.FullName);
  34. Directory.CreateDirectory(new System.IO.FileInfo(entryPath).Directory.FullName);
  35. entry.ExtractToFile(entryPath, true);
  36. }
  37. }
  38. }
  39. }
  40. }
  41. public static void ExtractRarFile(string rarPath, string outputPath)
  42. {
  43. try
  44. {
  45. // 确保输出目录存在
  46. Directory.CreateDirectory(outputPath);
  47. // 打开RAR文件
  48. using (var archive = RarArchive.Open(rarPath))
  49. {
  50. // 遍历所有文件
  51. foreach (var entry in archive.Entries)
  52. {
  53. if (!entry.IsDirectory)
  54. {
  55. // 构建完整输出路径
  56. string outputFilePath = Path.Combine(outputPath, entry.Key);
  57. // 确保输出文件的目录存在
  58. Directory.CreateDirectory(Path.GetDirectoryName(outputFilePath));
  59. // 解压文件
  60. entry.WriteToFile(outputFilePath, new ExtractionOptions
  61. {
  62. ExtractFullPath = true,
  63. Overwrite = true
  64. });
  65. }
  66. }
  67. }
  68. }
  69. catch (Exception ex)
  70. {
  71. throw new Exception($"解压RAR文件时出错: {ex.Message}");
  72. }
  73. }
  74. }
  75. }