public void UncompressPackage(string packagePath, string outputPath) { if (outputPath.Length > 0 && !outputPath.EndsWith(Path.DirectorySeparatorChar.ToString())) { outputPath += Path.DirectorySeparatorChar; } ProgressUpdate("Reading package headers ...", 0, 1, null); var reader = new PackageReader(packagePath); Package package = reader.Read(); long totalSize = package.Files.Sum(p => (long)p.Size()); long currentSize = 0; var buffer = new byte[32768]; foreach (AbstractFileInfo file in package.Files) { ProgressUpdate(file.Name, currentSize, totalSize, file); currentSize += file.Size(); string outPath = outputPath + file.Name; FileManager.TryToCreateDirectory(outPath); Stream inStream = file.MakeStream(); try { using (var inReader = new BinaryReader(inStream)) { using (var outFile = File.Open(outPath, FileMode.Create, FileAccess.Write)) { int read; while ((read = inReader.Read(buffer, 0, buffer.Length)) > 0) { outFile.Write(buffer, 0, read); } } } } finally { file.ReleaseStream(); } } reader.Dispose(); }
public void UncompressPackage(string packagePath, string outputPath) { if (outputPath.Length > 0 && outputPath.Last() != '/' && outputPath.Last() != '\\') { outputPath += "/"; } this.progressUpdate("Reading package headers ...", 0, 1); var reader = new PackageReader(packagePath); var package = reader.Read(); long totalSize = package.Files.Sum(p => (long)p.Size()); long currentSize = 0; foreach (var file in package.Files) { this.progressUpdate(file.Name, currentSize, totalSize); currentSize += file.Size(); var outPath = outputPath + file.Name; var dirName = Path.GetDirectoryName(outPath); if (!Directory.Exists(dirName)) { Directory.CreateDirectory(dirName); } var inReader = file.MakeReader(); var outFile = new FileStream(outPath, FileMode.Create, FileAccess.Write); if (inReader != null) { byte[] buffer = new byte[32768]; int read; while ((read = inReader.Read(buffer, 0, buffer.Length)) > 0) { outFile.Write(buffer, 0, read); } inReader.Dispose(); } outFile.Dispose(); } reader.Dispose(); }
public void UncompressPackage(string packagePath, string outputPath) { if (outputPath.Length > 0 && outputPath.Last() != '/' && outputPath.Last() != '\\') outputPath += "/"; this.progressUpdate("Reading package headers ...", 0, 1); var reader = new PackageReader(packagePath); var package = reader.Read(); long totalSize = package.Files.Sum(p => (long)p.Size()); long currentSize = 0; foreach (var file in package.Files) { this.progressUpdate(file.Name, currentSize, totalSize); currentSize += file.Size(); var outPath = outputPath + file.Name; var dirName = Path.GetDirectoryName(outPath); if (!Directory.Exists(dirName)) { Directory.CreateDirectory(dirName); } var inReader = file.MakeReader(); var outFile = new FileStream(outPath, FileMode.Create, FileAccess.Write); if (inReader != null) { byte[] buffer = new byte[32768]; int read; while ((read = inReader.Read(buffer, 0, buffer.Length)) > 0) { outFile.Write(buffer, 0, read); } inReader.Dispose(); } outFile.Dispose(); } reader.Dispose(); }