示例#1
0
 /// <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);
 }
示例#2
0
        /// <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);
        }
示例#3
0
 /// <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);
 }