public static SFOHeader Read(Stream fIn) { SFOHeader sfoHeader = new SFOHeader(); byte[] tempByteArray = new byte[4]; // read FileType fIn.Read(tempByteArray, 0, 4); sfoHeader.FileType = SFOReaderUtilities.ByteArrayToString(tempByteArray); // read sfoVerion fIn.Read(tempByteArray, 0, 4); sfoHeader.SfoVersion = SFOReaderUtilities.ByteArrayToString(tempByteArray); // read offsetKeyTable fIn.Read(tempByteArray, 0, 4); sfoHeader.OffsetKeyTable = SFOReaderUtilities.ByteArrayReverseToInt(tempByteArray); // read offsetValueTable fIn.Read(tempByteArray, 0, 4); sfoHeader.OffsetValueTable = SFOReaderUtilities.ByteArrayReverseToInt(tempByteArray); // read numberDataItem fIn.Read(tempByteArray, 0, 4); sfoHeader.NumberDataItems = SFOReaderUtilities.ByteArrayReverseToInt(tempByteArray); return(sfoHeader); }
private void Parse(Stream sfoFile) { // sfoHeader lesen this.sfoHeader = SFOHeader.Read(sfoFile); for (int i = 0; i < this.sfoHeader.NumberDataItems; 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.OffsetKeyTable - SFOReader.headerSize - (this.sfoHeader.NumberDataItems * 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.NumberDataItems; i++) { keyTableEntries.Add(sfoKeyTableEntry.ReadEntry(sfoFile)); } long skipBytesToValueTable = this.sfoHeader.OffsetValueTable - this.sfoHeader.OffsetKeyTable - sfoKeyTableEntry.KeyTableLength; sfoFile.Seek(skipBytesToValueTable, SeekOrigin.Current); // read ValueTable SFOValueTableEntry sfoValueTableEntry = new SFOValueTableEntry(); var valueTableEntries = new List <string>(); for (int i = 0; i < this.sfoHeader.NumberDataItems; 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]); } }