public MSBT(string filename) { File = new FileInfo(filename); if (File.Exists && filename.Length > 0) { FileStream fs = System.IO.File.Open(File.FullName, FileMode.Open, FileAccess.Read, FileShare.None); BinaryReaderX br = new BinaryReaderX(fs); // Initialize Members LBL1.Labels = new List<Entry>(); ATR1.Attributes = new List<UInt32>(); TXT2.OriginalEntries = new List<Entry>(); TXT2.Entries = new List<Entry>(); // Header Header.Identifier = br.ReadBytes(8); if (Encoding.ASCII.GetString(Header.Identifier) != "MsgStdBn") throw new InvalidMSBTException("The file provided is not a valid MSBT file."); Header.ByteOrderMark = br.ReadBytes(2); // Byte Order br.ByteOrder = Header.ByteOrderMark[0] > Header.ByteOrderMark[1] ? ByteOrder.LittleEndian : ByteOrder.BigEndian; Header.Unknown1 = br.ReadUInt16(); Header.Unknown2 = br.ReadUInt16(); Header.NumberOfSections = br.ReadUInt16(); Header.Unknown3 = br.ReadUInt16(); Header.FileSizeOffset = (UInt32)br.BaseStream.Position; Header.FileSize = br.ReadUInt32(); Header.Unknown4 = br.ReadBytes(10); if (Header.FileSize != br.BaseStream.Length) throw new InvalidMSBTException("The file provided is not a valid MSBT file."); SectionOrder.Clear(); for (int i = 0; i < Header.NumberOfSections; i++) { // Section Detection if (br.PeekString() == "LBL1") { ReadLBL1(br); SectionOrder.Add("LBL1"); } else if (br.PeekString() == "NLI1") { ReadNLI1(br); SectionOrder.Add("NLI1"); } else if (br.PeekString() == "ATR1") { ReadATR1(br); SectionOrder.Add("ATR1"); } else if (br.PeekString() == "TSY1") { ReadTSY1(br); SectionOrder.Add("TSY1"); } else if (br.PeekString() == "TXT2") { ReadTXT2(br); SectionOrder.Add("TXT2"); } } br.Close(); } }