/// <summary> /// Unpacks all the files inside the PB file into a folder. /// </summary> public void Unpack() { Files.Clear(); int index = 0; using (BinaryReader reader = new BinaryReader(new FileStream(FilePath, FileMode.Open))) { reader.BaseStream.Seek(8, SeekOrigin.Begin); while (reader.BaseStream.Length != reader.BaseStream.Position) { byte[] headerBytes = reader.ReadBytes(17); PBFileHeader header = new PBFileHeader(headerBytes); if (header.Length == 0x00F7FFFF) { return; } byte[] buffer = reader.ReadBytes(header.Length - 17); string directory = Path.GetDirectoryName(FilePath) + "\\" + Path.GetFileNameWithoutExtension(FilePath); Directory.CreateDirectory(directory); string fileName = directory + "\\" + index + "." + HeaderList.GetExtensionFromBuffer(buffer); using (BinaryWriter writer = new BinaryWriter(new FileStream(fileName, FileMode.Create))) { writer.Write(buffer); } Files.Add(new PBFileEntry(header, HeaderList.GetTypeFromFile(fileName))); index++; } } foreach (PBFileEntry file in Files) { if (file.File.GetType() == typeof(LZBFile)) { LZBFile lzb = (LZBFile)file.File; lzb.Decompress(); } } }
public PBFileEntry(PBFileHeader header, BaseFile file) { Header = header; File = file; }