public static GZippedFile GetGZippedFile(string fileInfo) { GZippedFile gzf = null; if (!string.IsNullOrEmpty(fileInfo)) { // get the file information string[] info = fileInfo.Split(','); if (info.Length == 4) { gzf = new GZippedFile(); gzf.Index = Convert.ToInt32(info[0]); gzf.RelativePath = info[1].Replace("/", "\\"); gzf.ModifiedDate = Convert.ToDateTime(info[2]); gzf.Length = Convert.ToInt32(info[3]); } } return(gzf); }
private static void CreateTempFile(FileInfo[] files, string lpBaseFolder, string lpTempFile, GZipResult result) { byte[] buffer; int count = 0; byte[] header; string fileHeader = null; string fileModDate = null; string lpFolder = null; int fileIndex = 0; string lpSourceFile = null; string vpSourceFile = null; GZippedFile gzf = null; FileStream fsOut = null; FileStream fsIn = null; if (files != null && files.Length > 0) { try { result.Files = new GZippedFile[files.Length]; // open the temp file for writing fsOut = new FileStream(lpTempFile, FileMode.Create, FileAccess.Write, FileShare.None); foreach (FileInfo fi in files) { lpFolder = fi.DirectoryName + "\\"; try { gzf = new GZippedFile(); gzf.Index = fileIndex; // read the source file, get its virtual path within the source folder lpSourceFile = fi.FullName; gzf.LocalPath = lpSourceFile; vpSourceFile = lpSourceFile.Replace(lpBaseFolder, string.Empty); vpSourceFile = vpSourceFile.Replace("\\", "/"); gzf.RelativePath = vpSourceFile; fsIn = new FileStream(lpSourceFile, FileMode.Open, FileAccess.Read, FileShare.Read); buffer = new byte[fsIn.Length]; count = fsIn.Read(buffer, 0, buffer.Length); fsIn.Close(); fsIn = null; fileModDate = fi.LastWriteTimeUtc.ToString(); gzf.ModifiedDate = fi.LastWriteTimeUtc; gzf.Length = buffer.Length; fileHeader = fileIndex.ToString() + "," + vpSourceFile + "," + fileModDate + "," + buffer.Length.ToString() + "\n"; header = Encoding.Default.GetBytes(fileHeader); fsOut.Write(header, 0, header.Length); fsOut.Write(buffer, 0, buffer.Length); fsOut.WriteByte(10); // linefeed gzf.AddedToTempFile = true; // update the result object result.Files[fileIndex] = gzf; // increment the fileIndex fileIndex++; } catch (Exception ex1) { // handle or display the error throw ex1; } finally { if (fsIn != null) { fsIn.Close(); fsIn = null; } } if (fsOut != null) { result.TempFileSize = fsOut.Length; } } } catch (Exception ex2) { // handle or display the error throw ex2; } finally { if (fsOut != null) { fsOut.Close(); fsOut = null; } } } result.FileCount = fileIndex; }
public static GZipResult Decompress(string lpZipFile, string lpDestFolder, bool deleteTempFile) { var result = new GZipResult(); if (!lpDestFolder.EndsWith("\\")) { lpDestFolder += "\\"; } if (!Directory.Exists(lpDestFolder)) { Directory.CreateDirectory(lpDestFolder); } string lpTempFile = lpDestFolder + Path.GetFileName(lpZipFile) + ".tmp"; result.TempFile = lpTempFile; result.ZipFile = lpZipFile; string line = null; string lpFilePath = null; GZippedFile gzf = null; FileStream fsTemp = null; var gzfs = new ArrayList(); // extract the files from the temp file try { fsTemp = UnzipToTempFile(lpZipFile, lpTempFile, result); if (fsTemp != null) { while (fsTemp.Position != fsTemp.Length) { line = null; while (string.IsNullOrEmpty(line) && fsTemp.Position != fsTemp.Length) { line = ReadLine(fsTemp); } if (!string.IsNullOrEmpty(line)) { gzf = GZippedFile.GetGZippedFile(line); if (gzf != null && gzf.Length > 0) { gzfs.Add(gzf); lpFilePath = lpDestFolder + gzf.RelativePath; gzf.LocalPath = lpFilePath; WriteFile(fsTemp, gzf.Length, lpFilePath); gzf.Restored = true; } } } } } //catch (Exception ex3) //{ // // handle or display the error // throw ex3; //} finally { if (fsTemp != null) { fsTemp.Close(); fsTemp = null; } } // delete the temp file try { if (deleteTempFile) { File.Delete(lpTempFile); result.TempFileDeleted = true; } } catch (Exception ex4) { // handle or display the error throw ex4; } result.FileCount = gzfs.Count; gzfs.CopyTo(result.Files); return(result); }