Ejemplo n.º 1
0
        private bool CheckBackUpIndex()
        {
            var path = Path.GetDirectoryName(m_fileFullName);
            var fileName = Path.Combine(path, BACK_UP).Replace("\\", "/");
            if (File.Exists(fileName))
            {
                var fileInfo = new FileInfo(fileName);
                var fileSize = fileInfo.Length;
                var fileStream = File.Open(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
                m_packageInfo = GetPackageInfo(fileStream, fileSize);

                if (m_packageInfo == null || m_packageInfo.IndexOffset == 0)
                    return true;
                var indexSize = (int)(fileSize - PackageInfo.GetPackageSize());//计算索引信息大小
                var indexData = new Byte[indexSize];
                fileStream.Position = 0;
                fileStream.Read(indexData, 0, indexSize);//获取索引信息
                LoadIndexInfo(indexData, false);
                return true;
            }
            else
                return false;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 获取包信息。
        /// </summary>
        /// <param name="fileSize"></param>
        private PackageInfo GetPackageInfo(FileStream fileStream, long fileSize)
        {
            var packageInfo = new PackageInfo();
            if (fileSize < PackageInfo.GetPackageSize())
                return new PackageInfo();

            fileStream.Position = fileSize - PackageInfo.GetPackageSize();//索引信息起始位置存放在文件结尾处。
            var lengthData = new Byte[PackageInfo.GetPackageSize()];
            fileStream.Read(lengthData, 0, PackageInfo.GetPackageSize());
            var index = 0;
            packageInfo.IndexOffset = EncodeDecoder.DecodeUInt32(lengthData, ref index);//获取索引信息起始位置
            return packageInfo;
        }
Ejemplo n.º 3
0
 /// <summary>
 /// 获取索引信息。
 /// </summary>
 /// <param name="fileSize">文件包大小。</param>
 /// <param name="needBackUpIndex">是否备份索引信息。</param>
 private void GetIndexInfo(long fileSize, bool needBackUpIndex)
 {
     lock (m_locker)
     {
         m_packageInfo = GetPackageInfo(m_fileStream, fileSize);
         if (m_packageInfo == null || m_packageInfo.IndexOffset == 0)
             return;
         var indexSize = (int)(fileSize - PackageInfo.GetPackageSize() - m_packageInfo.IndexOffset);//计算索引信息大小
         var indexData = new Byte[indexSize];
         m_fileStream.Position = m_packageInfo.IndexOffset;
         m_fileStream.Read(indexData, 0, indexSize);//获取索引信息
         LoadIndexInfo(indexData, needBackUpIndex);
     }
 }