Geeks With Blogs
Rohit Gupta Engaging talk on Microsoft Technologies ....My Resume

There is a neat little trick that one has to follow inorder to zip a entire folder into a gzip file.

It is essentially a two step process

  • Zip individual files in a folder using TarArchive
  • Zip the tar file using GZip
   1: public static string CreateTar(string directoryToCompress, string destPath, string tarFile)
   2: {
   3:     string destDrive = destPath.Substring(0, destPath.IndexOf(@"\") + 1);
   4:     Directory.SetCurrentDirectory(destDrive);
   5:     string tarFilePath = Path.Combine(destPath, tarFile);
   6:     using (Stream fs = new FileStream(tarFilePath, FileMode.OpenOrCreate))
   7:     {
   8:         using (TarArchive ta = TarArchive.CreateOutputTarArchive(fs))
   9:         {
  10:             string[] files = Directory.GetFiles(directoryToCompress);
  11:             foreach (string file in files)
  12:             {
  13:                 string entry = file.Substring(file.IndexOf(@"\") + 1);
  14:                 TarEntry te = TarEntry.CreateEntryFromFile(entry);
  15:                 ta.WriteEntry(te, false);
  16:             }
  17:         }
  18:     }
  19:     return tarFilePath;
  20: }

The above code creates the tar File. Note to create the Tar using TarArchive I used ICSharpCode.SharpZipLib.dll

The following code Zips the Tar file into a Gzip file:

   1: public static void CreateTarGzip()
   2: {
   3:     string sourceFolder = @"C:\beehive\stagingwebevent\20090324_00\";
   4:     string file = CreateTar(sourceFolder, @"C:\core\", "test.tar");
   5:     string outputFile = @"C:\core\test.tgz";
   6:     using (FileStream fs = new FileStream(outputFile, FileMode.CreateNew))
   7:     using (GZipStream s = new GZipStream(fs, CompressionMode.Compress))
   8:     {
   9:         using (FileStream inputfs = new FileStream(file, FileMode.Open))
  10:         {
  11:             byte[] buffer = new byte[4096];
  12:             int len = 0;
  13:             while ((len = inputfs.Read(buffer, 0, buffer.Length)) > 0)
  14:             {
  15:                 s.Write(buffer, 0, len);
  16:             }
  17:         }
  18:     }
  19: }
Posted on Thursday, April 9, 2009 9:47 PM | Back to top


Comments on this post: Using GZipStream to zip all files in folder

# re: Using GZipStream to zip all files in folder
Requesting Gravatar...
Very useful, lost of transport over internet need GZip content before transport. And is there any code on GZip string? Just zip a string to a smaller one
Left by Jack on Apr 13, 2009 1:53 AM

Your comment:
 (will show your gravatar)


Copyright © Rohit Gupta | Powered by: GeeksWithBlogs.net