private Mogo.Util.PackageInfo GetPackageInfo(FileStream fileStream, long fileSize) { Mogo.Util.PackageInfo info = new Mogo.Util.PackageInfo(); if (fileSize < Mogo.Util.PackageInfo.GetPackageSize()) { return(new Mogo.Util.PackageInfo()); } fileStream.Position = fileSize - Mogo.Util.PackageInfo.GetPackageSize(); byte[] buffer = new byte[Mogo.Util.PackageInfo.GetPackageSize()]; fileStream.Read(buffer, 0, Mogo.Util.PackageInfo.GetPackageSize()); int index = 0; info.IndexOffset = EncodeDecoder.DecodeUInt32(buffer, ref index); return(info); }
private void GetIndexInfo(long fileSize, bool needBackUpIndex) { lock (m_locker) { this.m_packageInfo = this.GetPackageInfo(this.m_fileStream, fileSize); if ((this.m_packageInfo != null) && (this.m_packageInfo.IndexOffset != 0)) { int count = (int)((fileSize - Mogo.Util.PackageInfo.GetPackageSize()) - this.m_packageInfo.IndexOffset); byte[] buffer = new byte[count]; this.m_fileStream.Position = this.m_packageInfo.IndexOffset; this.m_fileStream.Read(buffer, 0, count); this.LoadIndexInfo(buffer, needBackUpIndex); } } }
private bool CheckBackUpIndex() { string path = Path.Combine(Path.GetDirectoryName(this.m_fileFullName), this.BACK_UP).Replace(@"\", "/"); if (File.Exists(path)) { FileInfo info = new FileInfo(path); long length = info.Length; FileStream fileStream = File.Open(path, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite); this.m_packageInfo = this.GetPackageInfo(fileStream, length); if ((this.m_packageInfo != null) && (this.m_packageInfo.IndexOffset != 0)) { int count = ((int)length) - Mogo.Util.PackageInfo.GetPackageSize(); byte[] buffer = new byte[count]; fileStream.Position = 0L; fileStream.Read(buffer, 0, count); this.LoadIndexInfo(buffer, false); } return(true); } return(false); }