Advertisement
AyrA

File compressor

Jul 18th, 2016
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.51 KB | None | 0 0
  1. using System.IO;
  2. using System;
  3. using System.IO.Compression;
  4. using System.Text;
  5.  
  6. namespace AyrA.IO
  7. {
  8.     /// <summary>
  9.     /// Compresses or decompresses files into a blob
  10.     /// </summary>
  11.     public static class Compressor
  12.     {
  13.         /// <summary>
  14.         /// Compress a list of files into a blob
  15.         /// </summary>
  16.         /// <remarks>During compression, the path information is lost</remarks>
  17.         /// <param name="Files">Full file names.</param>
  18.         /// <param name="Destination">Destination stream</param>
  19.         public static void Compress(string[] Files, Stream Destination)
  20.         {
  21.             FileInfo[] FF = Array.ConvertAll(Files, delegate(string f) { return new FileInfo(f); });
  22.  
  23.             using (GZipStream zip = new GZipStream(Destination, CompressionMode.Compress, true))
  24.             {
  25.                 using (BinaryWriter BW = new BinaryWriter(zip))
  26.                 {
  27.                     BW.Write(Files.Length);
  28.                     foreach (FileInfo F in FF)
  29.                     {
  30. #if DEBUG
  31.                         Console.WriteLine("Compressing {0}", F.Name);
  32. #endif
  33.                         byte[] Data = File.ReadAllBytes(F.FullName);
  34.                         BW.Write(Encoding.UTF8.GetByteCount(F.Name));
  35.                         BW.Write(Encoding.UTF8.GetBytes(F.Name));
  36.                         BW.Write(Data.Length);
  37.                         BW.Write(Data);
  38.                     }
  39.                 }
  40.             }
  41.         }
  42.  
  43.         /// <summary>
  44.         /// Decompresses files from a stream into a directory
  45.         /// </summary>
  46.         /// <param name="Directory">Destination directory</param>
  47.         /// <param name="Source">Compressed source stream</param>
  48.         public static void Decompress(string Directory, Stream Source)
  49.         {
  50.             using (GZipStream GZ = new GZipStream(Source, CompressionMode.Decompress))
  51.             {
  52.                 using (BinaryReader BR = new BinaryReader(GZ))
  53.                 {
  54.                     int Count = BR.ReadInt32();
  55.                     for (int i = 0; i < Count; i++)
  56.                     {
  57.                         string FileName = Encoding.UTF8.GetString(BR.ReadBytes(BR.ReadInt32()));
  58. #if DEBUG
  59.                         Console.WriteLine("Decompressing {0}", FileName);
  60. #endif
  61.                         byte[] Content = BR.ReadBytes(BR.ReadInt32());
  62.                         File.WriteAllBytes(Path.Combine(Directory, FileName), Content);
  63.                     }
  64.                 }
  65.             }
  66.         }
  67.     }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement