// ********************************************************************** public Player(string fn) { working = new EventWaitHandle(true, EventResetMode.ManualReset); nosync = new EventWaitHandle(false, EventResetMode.AutoReset); try { FilePath = fn; FileName = Path.GetFileName(fn); fs = new FileStream(fn, FileMode.Open, FileAccess.Read); ResetDataFile(); // MktProvider.AttachPlayer(this); Status = "Файл открыт"; } catch (Exception e) { if (FileHeader == null) { FileHeader = new DataFileHeader("?", "", DateTime.MinValue, 0); } Status = e.Message; } }
public unsafe void Load(ref BinaryReader reader) { this.reader = reader; uint fileMagic = reader.ReadUInt32(); if (fileMagic != 0x30445349) { Console.WriteLine("Bad file format"); return; } //Read DTA header FileHeader newHeader = new FileHeader(); Decrypt(reader.ReadBytes(sizeof(FileHeader)), (byte *)&newHeader); //Seek to files section reader.BaseStream.Seek(newHeader.fileTableOffset, SeekOrigin.Begin); //Clean previous file headers & read all headers at once fileTableRecords.Clear(); byte[] allFileRecords = reader.ReadBytes(sizeof(FileTableRecord) * (int)newHeader.fileCount); Decrypt(ref allFileRecords); var offset = 0; for (var i = 0; i < (int)newHeader.fileCount; i++) { var newFileRecord = new FileTableRecord(); byte *recordBytes = (byte *)&newFileRecord; for (var j = 0; j < sizeof(FileTableRecord); j++) { recordBytes[j] = allFileRecords[offset + j]; } fileTableRecords.Add(newFileRecord); offset += sizeof(FileTableRecord); } //Go trough all file header seek, and get DTA file header for (var i = 0; i < fileTableRecords.Count; i++) { var currentHeader = fileTableRecords[i]; reader.BaseStream.Seek(currentHeader.headerOffset, SeekOrigin.Begin); DataFileHeader newDataFileHeader = new DataFileHeader(); Decrypt(reader.ReadBytes(sizeof(DataFileHeader)), (byte *)&newDataFileHeader); byte[] fileName = reader.ReadBytes(newDataFileHeader.nameLength); Decrypt(ref fileName); //save file name for later :) fileNames.Add(System.Text.Encoding.ASCII.GetString(fileName).ToLower()); dataFileHeaders.Add(newDataFileHeader); } }
public Table(string name, PageTable pageTable, DataFileHeader fileHeader) { this.Name = name; this.PageTable = pageTable; this.FileHeader = fileHeader; }