コード例 #1
0
        private static void ShrinkNormal(Siaqodb siaqodb)
        {
            var allOrderByPos = (from RawdataInfo ri in siaqodb
                                 where ri.IsFree == false
                                 orderby ri.Position
                                 select ri).ToList();

            ISqoFile     file         = siaqodb.GetRawFile();
            MemoryStream memStream    = new MemoryStream();
            MemoryStream memStreamNew = new MemoryStream();

            byte[] fullFile = new byte[file.Length];

            file.Read(0, fullFile);
            memStream.Write(fullFile, 0, fullFile.Length);

            for (int i = 0; i < allOrderByPos.Count; i++)
            {
                RawdataInfo rawi        = allOrderByPos[i];
                byte[]      actualBytes = new byte[rawi.Length];
                memStream.Seek(rawi.Position, SeekOrigin.Begin);
                memStream.Read(actualBytes, 0, actualBytes.Length);
                if (i == 0)
                {
                    rawi.Position = 0;
                    memStreamNew.Write(actualBytes, 0, actualBytes.Length);
                }
                else
                {
                    RawdataInfo prev = allOrderByPos[i - 1];
                    rawi.Position = prev.Position + prev.Length;
                    memStreamNew.Seek(rawi.Position, SeekOrigin.Begin);
                    memStreamNew.Write(actualBytes, 0, actualBytes.Length);
                }
            }
            for (int i = 0; i < allOrderByPos.Count; i++)
            {
                siaqodb.StoreObject(allOrderByPos[i]);
            }
            file.Length = memStreamNew.Length;
            file.Write(0, memStreamNew.ToArray());
        }
コード例 #2
0
ファイル: ObjectSerializer.cs プロジェクト: morecraf/Siaqodb
 public void SerializeType(SqoTypeInfo ti)
 {
     file.Write(0, SerializeTypeToBuffer(ti));
 }
コード例 #3
0
 public int SaveTransactionalObject(byte[] objBytes, long pos)
 {
     file.Write(pos, objBytes);
     return(objBytes.Length);
 }