private void LoadFile(string file) { using (FileStream stream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { string fileExtension = Path.GetExtension(file); switch (fileExtension) { case ".obf": obfBinary = new ObfBinary(stream); break; case ".pac": { Conversion.PacFile pac = new Conversion.PacFile(stream); Conversion.PacFileEntry pacObfEntry = pac.Files.FirstOrDefault(x => x.Filename.EndsWith(".obf")); if (pacObfEntry == null) { break; } stream.Seek(pac.DataStartPosition + pacObfEntry.Offset, SeekOrigin.Begin); using (BinaryReader reader = new BinaryReader(stream)) { using (MemoryStream subStream = new MemoryStream(reader.ReadBytes((int)pacObfEntry.CalculatedLength))) { obfBinary = new ObfBinary(subStream); } } } break; default: MessageBox.Show("Unsupported file specified.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); break; } if (obfBinary != null) { tscmbAssets.ComboBox.DataSource = obfBinary.Assets.ToList(); tscmbAssets.ComboBox.DisplayMember = "Key"; tscmbAssets.ComboBox.ValueMember = "Value"; } } }
public override void ReadFromStream(Stream stream) { EndianBinaryReader reader = new EndianBinaryReader(stream, Program.Endianness); NumFiles = reader.ReadUInt32(); Unknown0x04 = reader.ReadUInt32(); Unknown0x08 = reader.ReadUInt32(); Unknown0x0C = reader.ReadUInt32(); Files = new PacFileEntry[NumFiles]; for (int i = 0; i < Files.Length; i++) { Files[i] = new PacFileEntry(stream); } DataStartPosition = stream.Position; foreach (PacFileEntry file in Files) { file.SetLength((int)stream.Length, Files); } }