public DatDatabase(string filePath, bool keepOpen = false) { if (!File.Exists(filePath)) { throw new FileNotFoundException(filePath); } FilePath = filePath; stream = new FileStream(filePath, FileMode.Open, FileAccess.Read); stream.Seek(DAT_HEADER_OFFSET, SeekOrigin.Begin); using (var reader = new BinaryReader(stream, System.Text.Encoding.Default, true)) Header.Unpack(reader); RootDirectory = new DatDirectory(Header.BTree, Header.BlockSize); RootDirectory.Read(stream); if (!keepOpen) { stream.Close(); stream.Dispose(); stream = null; } RootDirectory.AddFilesToList(AllFiles); }
internal DatDatabase(string filePath, DatDatabaseType type) { if (!File.Exists(filePath)) { throw new FileNotFoundException(filePath); } this.FilePath = filePath; DatType = type; using (FileStream stream = new FileStream(filePath, FileMode.Open)) { byte[] sectorSizeBuffer = new byte[4]; stream.Seek(0x144u, SeekOrigin.Begin); stream.Read(sectorSizeBuffer, 0, sizeof(uint)); this.SectorSize = BitConverter.ToUInt32(sectorSizeBuffer, 0); stream.Seek(0x160u, SeekOrigin.Begin); byte[] firstDirBuffer = new byte[4]; stream.Read(firstDirBuffer, 0, sizeof(uint)); uint firstDirectoryOffset = BitConverter.ToUInt32(firstDirBuffer, 0); RootDirectory = new DatDirectory(firstDirectoryOffset, Convert.ToInt32(this.SectorSize), stream, DatType); } AllFiles = new Dictionary <uint, DatFile>(); RootDirectory.AddFilesToList(AllFiles); }
public DatDatabase(string filePath) { if (!File.Exists(filePath)) { throw new FileNotFoundException(filePath); } using (FileStream stream = new FileStream(filePath, FileMode.Open)) { byte[] sectorSizeBuffer = new byte[4]; stream.Seek(0x144u, SeekOrigin.Begin); stream.Read(sectorSizeBuffer, 0, sizeof(uint)); uint sectorSize = BitConverter.ToUInt32(sectorSizeBuffer, 0); stream.Seek(0x160u, SeekOrigin.Begin); byte[] firstDirBuffer = new byte[4]; stream.Read(firstDirBuffer, 0, sizeof(uint)); uint firstDirectoryOffset = BitConverter.ToUInt32(firstDirBuffer, 0); RootDirectory = new DatDirectory(firstDirectoryOffset, Convert.ToInt32(sectorSize), stream); } AllFiles = new List <DatFile>(); RootDirectory.AddFilesToList(AllFiles); }