Bend.RegionExposedFiles.readRegionAddr C# (CSharp) Метод

readRegionAddr() публичный Метод

public readRegionAddr ( long region_addr ) : IRegion
region_addr long
Результат IRegion
        public IRegion readRegionAddr(long region_addr)
        {
            String filepath = makeFilepath(region_addr);
            if (File.Exists(filepath)) {
                FileStream reader = File.Open(filepath, FileMode.Open);
                long length = reader.Length;
                reader.Dispose();

                return new EFRegion(region_addr, length, filepath, EFRegionMode.READ_ONLY_EXCL);

            } else {
                throw new RegionMissingException("no such region address: " + region_addr);

            }
        }

Usage Example

Пример #1
0
        public void T00_LogInit()
        {
            int system_reserved_space;

            IRegionManager rmgr = new RegionExposedFiles(InitMode.NEW_REGION, "c:\\BENDtst\\1");  // TODO, create random directory
            {

                LogWriter lr = LogWriter.LogWriter_NewRegion(rmgr, null, out system_reserved_space);
                lr.Dispose();
            }

            // open the rootblock stream...
            Stream rootblockstream = rmgr.readRegionAddr(0).getNewAccessStream();

            // read rootblock header
            rootblockstream.Seek(0, SeekOrigin.Begin);
            RootBlockHeader rootblockdata = Bend.Util.readStruct<RootBlockHeader>(rootblockstream);

            // check rootblock data
            {
                Assert.AreEqual(rootblockdata.magic, RootBlockHeader.ROOTMAGIC, "root block magic");
                Assert.AreEqual(rootblockdata.num_logsegments, LogWriter.DEFAULT_LOG_SEGMENTS);
                // TODO: check checksum
            }

            // read / check each log segment
            for (int i = 0; i < rootblockdata.num_logsegments; i++) {
                RootBlockLogSegment seg = Bend.Util.readStruct<RootBlockLogSegment>(rootblockstream);

                Stream logstream = rmgr.readRegionAddr(seg.logsegment_start).getNewAccessStream();
                logstream.Seek(0, SeekOrigin.Begin);

                // check that each log segment contains a valid closed log record
                logstream.Close();
            }

            rootblockstream.Close();
        }