Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using ICSharpCode.SharpZipLib.Core;
- using ICSharpCode.SharpZipLib.Zip;
- namespace Demo
- {
- class Program
- {
- static void Main()
- {
- const string testFile = @"C:\TMP\Demo.zip";
- var runner = new UnZipSolution(@"C:\TMP\2");
- runner.MethodA(testFile);
- }
- }
- class UnZipSolution
- {
- private readonly string _outFolder;
- public UnZipSolution(string temporaryDirectory)
- {
- _outFolder = temporaryDirectory;
- }
- public void MethodA(string archiveFilenameIn)
- {
- var files = ExtractZipFile(archiveFilenameIn,string.Empty, _outFolder);
- if (files.All(MethodB))
- {
- //files.ForEach(File.Delete);
- Directory.Delete(_outFolder, true);
- File.Delete(archiveFilenameIn);
- }
- }
- private static bool MethodB(string s)
- {
- Console.WriteLine("Empty method is Ok!");
- return true;
- }
- public List<string> ExtractZipFile (string archiveFilenameIn, string password, string outFolder)
- {
- var fileNames = new List<string>();
- ZipFile zf = null;
- try
- {
- var fs = File.OpenRead(archiveFilenameIn);
- zf = new ZipFile(fs);
- if (!string.IsNullOrEmpty(password))
- {
- zf.Password = password; // AES encrypted entries are handled automatically
- }
- foreach (ZipEntry zipEntry in zf)
- {
- if (!zipEntry.IsFile) continue; // Ignore directories
- var entryFileName = Path.GetFileName(zipEntry.Name);
- var s = Path.GetExtension(entryFileName);
- if (s == null || !s.Equals(".csv")) continue; // Ignore non-csv
- var buffer = new byte[4096]; // 4K is optimum
- var zipStream = zf.GetInputStream(zipEntry);
- // Manipulate the output filename here as desired.
- var fullZipToPath = Path.Combine(outFolder, entryFileName);
- var directoryName = Path.GetDirectoryName(fullZipToPath);
- if (!string.IsNullOrEmpty(directoryName))
- Directory.CreateDirectory(directoryName);
- using (var streamWriter = File.Create(fullZipToPath))
- {
- StreamUtils.Copy(zipStream, streamWriter, buffer);
- }
- fileNames.Add(entryFileName);
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- finally
- {
- if (zf != null)
- {
- zf.IsStreamOwner = true; // Makes close also shut the underlying stream
- zf.Close(); // Ensure we release resources
- }
- }
- return fileNames;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement