123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.IO.Compression;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using DocumentFormat.OpenXml.Vml.Office;
- namespace MECF.Framework.Common.Utilities
- {
- public static class ZIPUtil
- {
- public static async Task ZipAllExceptLogFolderAsync(string sourceFolder, string outputZipPath)
- {
- using (FileStream zipToOpen = new FileStream(outputZipPath, FileMode.Create))
- {
- using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Create))
- {
- await CopyFilesAndDirectoriesAsync(sourceFolder, "", archive);
- }
- }
- }
- private static async Task CopyFilesAndDirectoriesAsync(string sourceDir, string parentEntryName, ZipArchive archive)
- {
- // Add an entry for the current directory if it's not empty or skipped
- if (!string.IsNullOrEmpty(parentEntryName) && !Directory.GetFiles(sourceDir).Any() && !Directory.GetDirectories(sourceDir).Any())
- {
- string entryName = parentEntryName + "/";
- archive.CreateEntry(entryName);
- }
- foreach (string file in Directory.GetFiles(sourceDir))
- {
- string entryName = Path.Combine(parentEntryName, Path.GetFileName(file));
- ZipArchiveEntry entry = archive.CreateEntry(entryName);
- using (Stream entryStream = entry.Open())
- using (Stream fileStream = File.OpenRead(file))
- {
- await fileStream.CopyToAsync(entryStream);
- }
- }
- foreach (string directory in Directory.GetDirectories(sourceDir))
- {
- string dirName = Path.GetFileName(directory);
- if (dirName.Contains("Log") || dirName.Equals("ZIP", StringComparison.OrdinalIgnoreCase))
- {
- continue; // Skip the Log and ZIP folders
- }
- string entryName = Path.Combine(parentEntryName, dirName);
- await CopyFilesAndDirectoriesAsync(directory, entryName, archive);
- }
- // Add an entry for the current directory if it contains only subdirectories
- if (!string.IsNullOrEmpty(parentEntryName) && !Directory.GetFiles(sourceDir).Any())
- {
- string entryName = parentEntryName + "/";
- archive.CreateEntry(entryName);
- }
- }
- }
- }
|