コード例 #1
0
ファイル: GR2.cs プロジェクト: jesumarquez/lt
        private void RefreshCache(int SectorNumber)
        {
            if (SectorCached == SectorNumber)
            {
                return;
            }
            if (SectorCached != -1 && CommitCacheRequired)
            {
                CommitCacheRequired = false;
                StoreM2(SectorCached, Cache);
            }
            byte b    = 0;
            var  data = GetSector(SectorNumber, ref b);

            try
            {
                unsafe
                {
                    fixed(byte *ptrBuffer = &data[0])
                    {
                        Cache = (M2Sector)
                                Marshal.PtrToStructure(new IntPtr(ptrBuffer),
                                                       typeof(M2Sector));
                    }
                }
                SectorCached = SectorNumber;
            }
            catch (Exception e)
            {
                STrace.Debug(typeof(GR2).FullName, e.ToString());
                SectorCached = -1;
            }
        }
コード例 #2
0
ファイル: GR2.cs プロジェクト: jesumarquez/lt
 private void StoreM2(int sector, M2Sector M2)
 {
     using (var sw = File.OpenWrite(FileName))
     {
         var data = new byte[512];
         sw.Seek(sector * 512 + 512, SeekOrigin.Begin);
         unsafe
         {
             fixed(byte *ptrBuffer = &data[0])
             {
                 Marshal.StructureToPtr(M2, new IntPtr(ptrBuffer), true);
             }
         }
         sw.Write(data, 0, data.GetLength(0));
         sw.Close();
         Repository.TransactionLog.SectorTouch(FileName, sector);
     }
 }