public static byte[] CompressDirectory(string sInDir)
        {
            string[]     files        = Directory.GetFiles(sInDir, "*.*", SearchOption.AllDirectories);
            int          startIndex   = (sInDir[sInDir.Length - 1] != Path.DirectorySeparatorChar) ? (sInDir.Length + 1) : sInDir.Length;
            MemoryStream memoryStream = new MemoryStream();

            using (GZipStream zipStream = new GZipStream(memoryStream, CompressionMode.Compress))
            {
                string[] array = files;
                foreach (string text in array)
                {
                    string sRelativePath = text.Substring(startIndex);
                    ZIPHelper.CompressFile(sInDir, sRelativePath, zipStream);
                }
            }
            return(memoryStream.ToArray());
        }
        public static void CompressDirectory(string sInDir, string sOutFile)
        {
            string[] files      = Directory.GetFiles(sInDir, "*.*", SearchOption.AllDirectories);
            int      startIndex = (sInDir[sInDir.Length - 1] != Path.DirectorySeparatorChar) ? (sInDir.Length + 1) : sInDir.Length;

            using (FileStream compressedStream = new FileStream(sOutFile, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                using (GZipStream zipStream = new GZipStream(compressedStream, CompressionMode.Compress))
                {
                    string[] array = files;
                    foreach (string text in array)
                    {
                        string sRelativePath = text.Substring(startIndex);
                        ZIPHelper.CompressFile(sInDir, sRelativePath, zipStream);
                    }
                }
            }
        }