public static Dictionary <string, Stream> ExtractBlubbZip(Stream FromStream, string Password) { Dictionary <string, Stream> streams = new Dictionary <string, Stream>(); BlubbZipInputStream zipStream = new BlubbZipInputStream(FromStream); try { zipStream.Password = Password; BlubbZipEntry entry; byte[] buff = new byte[65536]; while ((entry = zipStream.GetNextEntry()) != null) { if (entry.IsDirectory) { while (zipStream.Read(buff, 0, buff.Length) > 0) { } } else { streams.Add(entry.Name, ExtractStream(zipStream, entry.Size)); } } } finally { zipStream.Close(); } return(streams); }
private static bool UnpackFile(string APath, string BasePath) { try { using (BlubbZipInputStream s = new BlubbZipInputStream(File.OpenRead(APath))) { BlubbZipEntry theEntry; while ((theEntry = s.GetNextEntry()) != null) { string fileName = Path.Combine(BasePath, theEntry.Name); string directoryName = Path.GetDirectoryName(fileName); if (directoryName.Length > 0 && Directory.Exists(directoryName) == false) { Directory.CreateDirectory(directoryName); } if (theEntry.IsFile == true && File.Exists(fileName)) { File.Delete(fileName); } if (theEntry.IsFile == true) { using (FileStream streamWriter = File.Create(fileName)) { int size = 2048; byte[] data = new byte[2048]; while (true) { if ((size = s.Read(data, 0, data.Length)) == 0) { break; } streamWriter.Write(data, 0, size); } } } } } } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e); System.Windows.Forms.MessageBox.Show("Failed to extract Patch \"" + Path.GetFileName(APath) + "\"!\nPlease inform an Administrator about this.", "Extract Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); return(false); } return(true); }
private static bool UnpackFile(string APath, string BasePath) { try { using (BlubbZipInputStream s = new BlubbZipInputStream(File.OpenRead(APath))) { BlubbZipEntry theEntry; while ((theEntry = s.GetNextEntry()) != null) { string fileName = Path.Combine(BasePath, theEntry.Name); string directoryName = Path.GetDirectoryName(fileName); if (directoryName.Length > 0 && Directory.Exists(directoryName) == false) { Directory.CreateDirectory(directoryName); } if (theEntry.IsFile == true && File.Exists(fileName)) { File.Delete(fileName); } if (theEntry.IsFile == true) { using (FileStream streamWriter = File.Create(fileName)) { int size = 2048; byte[] data = new byte[2048]; while (true) { if ((size = s.Read(data, 0, data.Length)) == 0) { break; } streamWriter.Write(data, 0, size); } } } } } } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e); return(false); } return(true); }