/// <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> /// 写内容标识的nContentID内容段 /// </summary> /// <param name="lsStream">内存流列表</param> /// <param name="nContentID">内容标识</param> /// <returns>成功->true,反之->false</returns> public override bool WriteContent(List <MemoryStream> lsStream, int nContentID) { if (!base.WriteContent(lsStream, nContentID)) { return(false); } try { //解密 //_DecryptFile.ExecuteDecrypt(ref _fStream); if (_fStream.CanWrite && _fStream.CanSeek) { _fStream.Seek(0, SeekOrigin.End); } long lConStartPos = _fStream.Length; //序列化一次文件段 ContentSection conSec = new BinaryContentSection(); conSec.Serialize(ref _fStream); conSec.SetIndex(nContentID); conSec.SetStartPos(_fStream.Length); conSec.SetSectionLen(lsStream[0].Length); conSec.SetEndPos(_fStream.Length + lsStream[0].Length * lsStream.Count); _fStream.Seek(lConStartPos, SeekOrigin.Begin); //再序列化一次 conSec.Serialize(ref _fStream); for (int i = 0; i < lsStream.Count; i++) { lsStream[i].WriteTo(_fStream); } _fStream.Flush(); //加密 //_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); }