void Main() { var files = ExtractZip(@"云阅卷V5.0.4.1_Alpha_20201015.zip",@"程序包/firstelite/publish/OMS",@"E:Desktop est"); files.Count.Dump(); files.Dump(); } List<string> ExtractZip(string zipFilePath, string relativePath, string destPath) { var result = new List<string>(); relativePath = relativePath.Replace(@"",@"/"); using (FileStream zipToOpen = new FileStream(zipFilePath, FileMode.Open)) { using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Read)) { var entry = archive.Entries.FirstOrDefault(x=>x.FullName.ToUpper() == relativePath.ToUpper()); if(entry == null) entry = archive.Entries.FirstOrDefault(x => x.FullName.ToUpper() == (relativePath + "/").ToUpper()); if (!string.IsNullOrWhiteSpace(entry.Name)) { var path = Path.Combine(destPath,entry.Name); using (var file = new FileStream(path, FileMode.Create, FileAccess.Write)) { entry.Open().CopyTo(file); file.Close(); } result.Add(path); } else { var items = archive.Entries.Where(x => x.FullName.StartsWith(entry.FullName)).ToList(); foreach (var item in items.Where(x => string.IsNullOrWhiteSpace(x.Name)).OrderBy(x => x.Length)) { var path = Path.Combine(destPath, item.FullName.Substring(entry.FullName.Length)); if (!Directory.Exists(path)) Directory.CreateDirectory(path); } foreach (var item in items.Where(x => !string.IsNullOrWhiteSpace(x.Name)).OrderBy(x => x.Length)) { var path = new FileInfo( Path.Combine(destPath, item.FullName.Substring(entry.FullName.Length))).Directory.FullName; path = Path.Combine(path, item.Name); using (var file = new FileStream(path, FileMode.Create, FileAccess.Write)) { item.Open().CopyTo(file); file.Close(); } result.Add(path); } } } } return result; } // Define other methods and classes here
写入zip
var files = new Dictionary<string, byte[]>(); var utf8WithBom = new UTF8Encoding(true); var classPlanResult = string.Empty; using (var db = new DATAEntities()) { db.Database.CommandTimeout = 3600; var classPlanID = this.CurrentClassPlanID; var classPlan = db.ClassPlan.FirstOrDefault(item => item.ID == classPlanID); classPlanResult = classPlan.FixedFormalDivideResult; } files.Add("教学班分班规划参数1.json", utf8WithBom.GetBytes(classPlanResult)); var json = generateNonadministraviePredictClassPlanParameter(chkLessonHourOptimize1.Checked); files.Add("教学班分班规划参数2.json", utf8WithBom.GetBytes(json)); using (var ms = new MemoryStream()) { using (var zip = new ZipArchive(ms, ZipArchiveMode.Create,true)) { foreach (var file in files) { var item = zip.CreateEntry(file.Key); using (var s = item.Open()) { s.Write(file.Value, 0, file.Value.Length); } } } renderDownloadFile("教学班分班规划传入参数.zip", ms); }