コード例 #1
0
        static public IEnumerable <(string filename, string content)> ReadFromFileStreamBackwards(string fileName,
                                                                                                  Func <string, FileStream> OpenFile, long maxLines = long.MaxValue)
        {
            FileSeeker f = new FileSeeker();

            using var fileStream = new FileStreamWrapper(OpenFile(fileName));
            fileStream.Seek(0, SeekOrigin.End); // We want to read backwards - so start at the end
            for (; ;)
            {
                string line = null;
                try
                {
                    line = f.SeekLastLineFromCurrentAndPositionOnStartOfItAndReturnReadLine(fileStream);
                }
                catch (Exception)
                {
                }

                if (line != null && --maxLines > 0)
                {
                    yield return(Path.GetFileNameWithoutExtension(fileName), line);
                }
                else
                {
                    break;
                }
            }
        }
コード例 #2
0
        public int ReadPageData(FileStreamWrapper stream, int pageIdx)
        {
            if (null == stream)
            {
                throw new ArgumentNullException();
            }

            byte[] dataBuffer = new byte[PageSize];

            // read from the file stream
            if (0 > pageIdx ||
                stream.Length < (pageIdx + 1) * PageSize)
            {
                throw new InvalidPageException();
            }

            stream.Seek(pageIdx * PageSize, SeekOrigin.Begin);
            stream.Read(dataBuffer, 0, dataBuffer.Length);

            // initialize members
            this.recordList = new List <byte[]>();
            this.ReadPageData(dataBuffer);

            return(pageIdx);
        }
コード例 #3
0
        public void SPT_TestReadWriteTable()
        {
            int entryCount           = 40;
            int physicalPageDistance = 5;

            string dataFile = "SPT_TestData1.tpdb";

            if (File.Exists(dataFile))
            {
                File.Delete(dataFile);
            }

            List <int>         freedPages = null;
            StoragePageManager spaceMgr   = new StoragePageManager();
            StoragePageTable   pageTable2 = new StoragePageTable();
            StoragePageTable   pageTable  = new StoragePageTable();

            for (int idx = 0; idx < entryCount; idx++)
            {
                pageTable.SetLogicalPage(idx + physicalPageDistance);
            }

            using (FileStreamWrapper dataFileStream = FileStreamWrapper.CreateObject(dataFile))
            {
                int root = pageTable.WritePageTableData(dataFileStream, spaceMgr, out freedPages);
                dataFileStream.Seek(0, SeekOrigin.Begin);
                pageTable2.ReadPageTableData(dataFileStream, root);
            }

            for (int idx = 0; idx < entryCount; idx++)
            {
                int physicalAddress = pageTable2.GetPhysicalPage(idx);
                Assert.AreEqual(idx + physicalPageDistance, physicalAddress);
            }
        }
コード例 #4
0
        public int WritePageData(FileStreamWrapper stream, int pageIdx)
        {
            if (null == stream)
            {
                throw new ArgumentNullException();
            }

            // get the page data
            byte[] dataBuffer = new byte[PageSize];
            this.WritePageData(dataBuffer);

            // write to the file stream
            if (0 > pageIdx ||
                stream.Length < pageIdx * PageSize)
            {
                pageIdx = (int)(stream.Length / PageSize);
            }

            stream.Seek(pageIdx * PageSize, SeekOrigin.Begin);
            stream.Write(dataBuffer, 0, dataBuffer.Length);

            return(pageIdx);
        }
コード例 #5
0
ファイル: StoragePage.cs プロジェクト: vlung/Citicenter
        public int ReadPageData(FileStreamWrapper stream, int pageIdx)
        {
            if (null == stream)
            {
                throw new ArgumentNullException();
            }

            byte[] dataBuffer = new byte[PageSize];

            // read from the file stream
            if (0 > pageIdx
                || stream.Length < (pageIdx + 1) * PageSize)
            {
                throw new InvalidPageException();
            }

            stream.Seek(pageIdx * PageSize, SeekOrigin.Begin);
            stream.Read(dataBuffer, 0, dataBuffer.Length);

            // initialize members
            this.recordList = new List<byte[]>();
            this.ReadPageData(dataBuffer);

            return pageIdx;
        }
コード例 #6
0
ファイル: StoragePage.cs プロジェクト: vlung/Citicenter
        public int WritePageData(FileStreamWrapper stream, int pageIdx)
        {
            if (null == stream)
            {
                throw new ArgumentNullException();
            }

            // get the page data
            byte[] dataBuffer = new byte[PageSize];
            this.WritePageData(dataBuffer);

            // write to the file stream
            if (0 > pageIdx
                || stream.Length < pageIdx * PageSize)
            {
                pageIdx = (int)(stream.Length / PageSize);
            }

            stream.Seek(pageIdx * PageSize, SeekOrigin.Begin);
            stream.Write(dataBuffer, 0, dataBuffer.Length);

            return pageIdx;
        }