/// <summary> /// 读取内容标识为nContentID的所有内容 /// </summary> /// <param name="lsStream">内存流列表</param> /// <param name="nContentID">内容标识</param> /// <returns>成功->true,反之->false</returns> public override bool ReadContent(out List <MemoryStream> lsStream, int nContentID) { if (!base.ReadContent(out lsStream, nContentID)) { return(false); } try { //解密 //_DecryptFile.ExecuteDecrypt(ref _fStream); if (_fStream.CanSeek && _fStream.CanRead) { _fStream.Seek(0, SeekOrigin.Begin); } List <ContentSection> lsSecs = new List <ContentSection>(); while (_fStream.Position != _fStream.Length) { ContentSection conSec = new BinaryContentSection(); if (conSec.Deserialize(ref _fStream)) { _fStream.Seek(conSec.GetEndPos(), SeekOrigin.Begin); if (conSec.GetIndex() == nContentID) { lsSecs.Add(conSec); } } else { break; } } if (lsSecs.Count > 0) { long lStartPos, lEndPos, lSecLen; for (int i = 0; i < lsSecs.Count; i++) { lStartPos = lsSecs[i].GetStartPos(); lEndPos = lsSecs[i].GetEndPos(); lSecLen = lsSecs[i].GetSectionLen(); _fStream.Seek(lStartPos, SeekOrigin.Begin); while (lStartPos < lEndPos) { byte[] arrContent = new byte[lSecLen]; _fStream.Read(arrContent, 0, (int)lSecLen); lStartPos += lSecLen; MemoryStream mStream = new MemoryStream(arrContent); lsStream.Add(mStream); } } } //加密 //_EncryptFile.ExecuteEncrypt(ref _fStream); return(true); } catch (Exception e) { e.ToString(); } return(false); }
/// <summary> /// 获取内容列表 /// </summary> /// <param name="lsContent">内容列表</param> /// <returns>成功->true,反之->false</returns> public override bool GetContentList(out List <Content> lsContent) { if (!base.GetContentList(out lsContent)) { return(false); } try { //解密 //_DecryptFile.ExecuteDecrypt(ref _fStream); if (!(_fStream.CanRead && _fStream.CanSeek)) { return(false); } _fStream.Seek(0, SeekOrigin.Begin); while (_fStream.Position != _fStream.Length) { ContentSection conSec = new BinaryContentSection(); if (conSec.Deserialize(ref _fStream)) { _fStream.Seek(conSec.GetEndPos(), SeekOrigin.Begin); lsContent.Add(conSec.GetContent()); } else { break; } } //加密 //_EncryptFile.ExecuteEncrypt(ref _fStream); return(true); } catch (Exception e) { e.ToString(); } return(false); }