public static SFOHeader Read(Stream fIn) { SFOHeader sfoHeader = new SFOHeader(); byte[] tempByteArray = new byte[4]; // read FileType fIn.Read(tempByteArray, 0, 4); sfoHeader.SetFileType(SFOReaderUtilities.ByteArrayToString(tempByteArray)); // read sfoVerion fIn.Read(tempByteArray, 0, 4); sfoHeader.SetSfoVersion(SFOReaderUtilities.ByteArrayToString(tempByteArray)); // read offsetKeyTable fIn.Read(tempByteArray, 0, 4); sfoHeader.SetOffsetKeyTable(SFOReaderUtilities.ByteArrayReverseToInt(tempByteArray)); // read offsetValueTable fIn.Read(tempByteArray, 0, 4); sfoHeader.SetOffsetValueTable(SFOReaderUtilities.ByteArrayReverseToInt(tempByteArray)); // read numberDataItem fIn.Read(tempByteArray, 0, 4); sfoHeader.SetNumberDataItems(SFOReaderUtilities.ByteArrayReverseToInt(tempByteArray)); return(sfoHeader); }
private void Parse(Stream sfoFile) { // sfoHeader lesen this.sfoHeader = SFOHeader.Read(sfoFile); for (int i = 0; i < this.sfoHeader.GetNumberDataItems(); i++) { this.IndexTableEntries.Add(SFOIndexTableEntry.ReadEntry(sfoFile)); } // Zum KeyTable Anfang springen // (offset der KeyTabelle - Header-Lהnge - Anzahl * IndexEntry Lהnge = restl. zu ignorierende Bytes) int skipBytesToKeyTable = this.sfoHeader.GetOffsetKeyTable() - SFOReader.headerSize - (this.sfoHeader.GetNumberDataItems() * SFOIndexTableEntry.IndexTableEntryLength); sfoFile.Seek(skipBytesToKeyTable, SeekOrigin.Current); // read KeyTable var sfoKeyTableEntry = new SfoKeyTableEntry(); var keyTableEntries = new List <string>(); for (int i = 0; i < this.sfoHeader.GetNumberDataItems(); i++) { keyTableEntries.Add(sfoKeyTableEntry.ReadEntry(sfoFile)); } long skipBytesToValueTable = this.sfoHeader.GetOffsetValueTable() - this.sfoHeader.GetOffsetKeyTable() - sfoKeyTableEntry.GetKeyTableLength(); sfoFile.Seek(skipBytesToValueTable, SeekOrigin.Current); // read ValueTable SFOValueTableEntry sfoValueTableEntry = new SFOValueTableEntry(); var valueTableEntries = new List <string>(); for (int i = 0; i < this.sfoHeader.GetNumberDataItems(); i++) { valueTableEntries.Add(sfoValueTableEntry.ReadEntry(sfoFile, this.IndexTableEntries[i]) .Replace("\0", string.Empty)); } for (int i = 0; i < keyTableEntries.Count; i++) { this.KeyValues.Add(keyTableEntries[i], valueTableEntries[i]); } }