Zip File or folder 2
Here is alternative source code to zip file or folder in c# ...
Just add reference to the solution for vjslib dll available with C# .NET
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Windows.Forms; using java.util; using java.util.zip; using java.io; namespace BHI.Rats { /// <summary> /// compression component /// </summary> public static class RatsCompressionManager { #region Compress and Uncompress /// <summary> /// Zips the folder name to create a zip file. /// </summary> /// <remarks>The function is used for running as a worker thread</remarks> /// <param name="parameters">An array of 2 objects - folderName and zipFileName</param> public static void Zip(object parameters) { object[] parms = (object[])parameters; Zip((string)parms[0], (string)parms[1]); } /// <summary> /// Zips the folder name to create a zip file /// </summary> /// <param name="folderName"></param> /// <param name="zipFileName"></param> public static void Zip(string folderName, string zipFileName) { try { ICSharpCode.SharpZipLib.Zip.FastZip fz = new ICSharpCode.SharpZipLib.Zip.FastZip(); fz.CreateZip(zipFileName, folderName, true, ""); } catch (ICSharpCode.SharpZipLib.SharpZipBaseException) { //Fail silently on cancel if (Directory.Exists(folderName)) { Directory.Delete(folderName, true); } if (System.IO.File.Exists(zipFileName)) { System.IO.File.Delete(zipFileName); } } catch { //Close silently } } /// <summary> /// Compress list of files [sourceFiles] to [zipFileName] /// </summary> /// <param name="zipFileName"></param> /// <param name="sourceFiles"></param> public static void Zip(string zipFileName, FileInfo[] sourceFiles) { try { // get the root folder. NOTE: it assums that the first file is at the root. string rootFolder = Path.GetDirectoryName(sourceFiles[0].FullName); // compress ICSharpCode.SharpZipLib.Zip.FastZip fz = new ICSharpCode.SharpZipLib.Zip.FastZip(); fz.CreateZip(zipFileName, rootFolder, true, ""); } catch (Exception ex) { throw ex; } } /// <summary> /// Extract [zipFileName] to [destinationPath] /// </summary> /// <param name="zipFileName"></param> /// <param name="destinationPath"></param> public static void Extract(string zipFileName, string destinationPath) { try { ICSharpCode.SharpZipLib.Zip.FastZip fz = new ICSharpCode.SharpZipLib.Zip.FastZip(); fz.ExtractZip(zipFileName, destinationPath, ""); } catch (Exception ex) { throw ex; } } /// <summary> /// Extract [zipFileName] to [destinationPath] /// </summary> /// <param name="zipFileName"></param> /// <param name="destinationPath"></param> /// <param name="fileNameToExtract">need to be the relative path in the zip file</param> public static void ExtractSingleFile(string zipFileName, string destinationPath, string fileNameToExtract) { try { ICSharpCode.SharpZipLib.Zip.FastZip fz = new ICSharpCode.SharpZipLib.Zip.FastZip(); fz.ExtractZip(zipFileName, destinationPath, fileNameToExtract); } catch (Exception ex) { throw ex; } } /// <summary> /// Return a list of zip entries (compressed files meta data) /// </summary> /// <param name="zipFile"></param> /// <returns></returns> private static List<ZipEntry> getZippedFiles(ZipFile zipFile) { List<ZipEntry> zipEntries = new List<ZipEntry>(); java.util.Enumeration zipEnum = zipFile.entries(); while (zipEnum.hasMoreElements()) { ZipEntry zip = (ZipEntry)zipEnum.nextElement(); zipEntries.Add(zip); } return zipEntries; } /// <summary> /// Get the list of files in the zip file /// </summary> /// <param name="zipFileName"></param> /// <returns></returns> public static System.Collections.ArrayList GetZipEntries(string zipFileName) { System.Collections.ArrayList arrZipEntries = new System.Collections.ArrayList(); ZipFile zipfile = new ZipFile(zipFileName); List<ZipEntry> zipFiles = getZippedFiles(zipfile); foreach (ZipEntry zipFile in zipFiles) { arrZipEntries.Add(zipFile.getName()); } zipfile.close(); System.Collections.ArrayList arrZipEntriesInside = new System.Collections.ArrayList(); foreach (string strZipFile in arrZipEntries) { if (string.Compare(Path.GetExtension(strZipFile), ".zip", true) == 0) { ExtractSingleFile(zipFileName, Path.GetDirectoryName(zipFileName), Path.GetFileName(strZipFile)); ZipFile zipfileinside = new ZipFile(Path.GetDirectoryName(zipFileName) + Path.DirectorySeparatorChar + strZipFile); List<ZipEntry> zipFilesInside = getZippedFiles(zipfileinside); foreach (ZipEntry zipFile in zipFilesInside) { arrZipEntriesInside.Add(zipFile.getName()); } zipfileinside.close(); } } foreach (string strFilesInsideZip in arrZipEntriesInside) { arrZipEntries.Add(strFilesInsideZip); } return arrZipEntries; } /// <summary> /// Extract [zipFileName] to [destinationPath] recursively /// </summary> /// <param name="zipFileName"></param> public static void ExtractRecursively(string zipFileName) { try { ICSharpCode.SharpZipLib.Zip.FastZip fz = new ICSharpCode.SharpZipLib.Zip.FastZip(); fz.ExtractZip(zipFileName, Path.GetDirectoryName(zipFileName) + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(zipFileName), ""); DirectoryInfo diInputDir = new DirectoryInfo(Path.GetDirectoryName(zipFileName) + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(zipFileName)); FileInfo[] fiInfoArr = diInputDir.GetFiles("*.zip", SearchOption.AllDirectories); foreach (FileInfo fiInfo in fiInfoArr) { if (string.Compare(Path.GetExtension(fiInfo.FullName), ".zip", true) == 0) { ExtractRecursively(fiInfo.FullName); } } } catch (Exception ex) { throw ex; } } #endregion } }
Comments
Post a Comment