Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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;
        }