using SharpCompress.Archives; using SharpCompress.Archives.Rar; using SharpCompress.Common; using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; using System.Linq; using System.Text; using System.Threading.Tasks; namespace wispro.sp.winClient { public class ExtractFileUtil { public static void ExtractZip(string zipFilePath, string extractPath) { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); // 确保提取目录存在 Directory.CreateDirectory(extractPath); // 使用 ZipArchive 解压缩 ZIP 文件 using (FileStream zipToOpen = new FileStream(zipFilePath, FileMode.Open)) { using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Read, true, Encoding.GetEncoding("GB2312"))) { foreach (ZipArchiveEntry entry in archive.Entries) { if (entry.FullName.EndsWith("/", StringComparison.Ordinal) || entry.FullName.EndsWith("\\", StringComparison.Ordinal)) { Console.WriteLine($"目录: {entry.FullName}"); } else { string entryPath = Path.Combine(extractPath, entry.FullName); Directory.CreateDirectory(new System.IO.FileInfo(entryPath).Directory.FullName); entry.ExtractToFile(entryPath, true); } } } } } public static void ExtractRarFile(string rarPath, string outputPath) { try { // 确保输出目录存在 Directory.CreateDirectory(outputPath); // 打开RAR文件 using (var archive = RarArchive.Open(rarPath)) { // 遍历所有文件 foreach (var entry in archive.Entries) { if (!entry.IsDirectory) { // 构建完整输出路径 string outputFilePath = Path.Combine(outputPath, entry.Key); // 确保输出文件的目录存在 Directory.CreateDirectory(Path.GetDirectoryName(outputFilePath)); // 解压文件 entry.WriteToFile(outputFilePath, new ExtractionOptions { ExtractFullPath = true, Overwrite = true }); } } } } catch (Exception ex) { throw new Exception($"解压RAR文件时出错: {ex.Message}"); } } } }