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; } } }
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); }
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); } }
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); }
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; }
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; }