public static Bnd3FileEntry Read(Stream inputStream, int fileSize, string fileName) { Bnd3FileEntry result = new Bnd3FileEntry(); BinaryReader reader = new BinaryReader(inputStream, Encoding.UTF8, true); result.FileName = fileName; result.EntryData = reader.ReadBytes(fileSize); return(result); }
private void Read(Stream inputStream) { BinaryReader reader = new BinaryReader(inputStream, Encoding.GetEncoding("Shift-JIS"), true); string signature = reader.ReadString(4); if (signature != Bnd3Signature) { throw new Exception("Unknown signature"); } string id = reader.ReadString(8); int version = reader.ReadInt32(); if (version != 0x74 && version != 0x54 && version != 0x5c && version != 0x7c && version != 0x78) { throw new InvalidDataException(); } int recordCount = reader.ReadInt32(); int totalHeaderSize = reader.ReadInt32(); // Either zero or the unaligned end of the last record's name before the first record's data. reader.Skip(8); if (version == 0x5c) { } long p = reader.GetPosition(); for (int i = 0; i < recordCount; i++) { reader.Skip(4); int fileSize = reader.ReadInt32(); int fileOffset = reader.ReadInt32(); int fileId = reader.ReadInt32(); int hmm = reader.ReadInt32(); int fileNameOffset = reader.ReadInt32(); if (version != 0x78) { int fileSize2 = reader.ReadInt32(); } long offset = reader.GetPosition(); string fileName = ""; if (fileNameOffset > 0) { reader.Seek(fileNameOffset); fileName = reader.ReadNullTerminatedString(); } reader.Seek(fileOffset); _entries.Add(Bnd3FileEntry.Read(inputStream, fileSize, fileName)); reader.Seek(offset); } }