public static void CreateEmptyFile(BinaryWriter writer) { // Create new header instance var header = new Header(); header.IndexRootPageID = 0; header.FreeIndexPageID = 0; header.FreeDataPageID = uint.MaxValue; header.LastFreeDataPageID = uint.MaxValue; header.LastPageID = 0; HeaderFactory.WriteToFile(header, writer); // Create a first fixed index page var pageIndex = new IndexPage(0); pageIndex.NodeIndex = 0; pageIndex.NextPageID = uint.MaxValue; // Create first fixed index node, with fixed middle guid var indexNode = pageIndex.Nodes[0]; indexNode.ID = new Guid(new byte[] { 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127 }); indexNode.IsDeleted = true; indexNode.Right = new IndexLink(); indexNode.Left = new IndexLink(); indexNode.DataPageID = uint.MaxValue; indexNode.FileName = string.Empty; indexNode.FileExtension = string.Empty; PageFactory.WriteToFile(pageIndex, writer); }
public static void WriteToFile(Header header, BinaryWriter writer) { // Seek the stream on 0 position to save header writer.BaseStream.Seek(0, SeekOrigin.Begin); writer.Write(Header.FileID.ToBytes(Header.FileID.Length)); writer.Write(Header.FileVersion); writer.Write(header.IndexRootPageID); writer.Write(header.FreeIndexPageID); writer.Write(header.FreeDataPageID); writer.Write(header.LastFreeDataPageID); writer.Write(header.LastPageID); }
public Engine(FileStream stream) { Reader = new BinaryReader(stream); if (stream.CanWrite) { Writer = new BinaryWriter(stream); Writer.Lock(Header.LOCKER_POS, 1); } Header = new Header(); HeaderFactory.ReadFromFile(Header, this.Reader); CacheIndexPage = new CacheIndexPage(Reader, Writer, Header.IndexRootPageID); }
public static void ReadFromFile(Header header, BinaryReader reader) { // Seek the stream on 0 position to read header reader.BaseStream.Seek(0, SeekOrigin.Begin); // Make same validation on header file if (reader.ReadString(Header.FileID.Length) != Header.FileID) throw new FileDBException("The file is not a valid storage archive"); if (reader.ReadInt16() != Header.FileVersion) throw new FileDBException("The archive version is not valid"); header.IndexRootPageID = reader.ReadUInt32(); header.FreeIndexPageID = reader.ReadUInt32(); header.FreeDataPageID = reader.ReadUInt32(); header.LastFreeDataPageID = reader.ReadUInt32(); header.LastPageID = reader.ReadUInt32(); header.IsDirty = false; }