Exemplo n.º 1
0
        /// <summary>
        /// 创建分片
        /// </summary>
        /// <param name="filesize">文件的大小</param>
        /// <param name="sliceSize">分片的字节大小</param>
        /// <returns>返回分片列表</returns>
        public static List<Slice> CreateSliceList(long filesize, int sliceSize)
        {
            List<Slice> slicelist = new List<Slice>();

            #region 开始分片

            long slice_count = 0; //分片数量

            // 先按照最小分片计算分片数量
            long slice_size = sliceSize;
            slice_count = (int)(filesize / slice_size);
            if ((filesize % slice_size) != 0)
                slice_count++;

            long offset = 0;
            for (int i = 0; i < slice_count; i++)
            {
                Slice ts = new Slice()
                {
                    index = i,
                    start = offset,
                    totalSize = slice_size
                };
                if (ts.start + ts.totalSize > filesize) ts.totalSize = filesize - ts.start;
                offset += slice_size;
                slicelist.Add(ts);
            }

            #endregion

            return slicelist;
        }
Exemplo n.º 2
0
 /// <summary>
 /// 读入一个分片
 /// </summary>
 /// <param name="br">用于读入数据的流</param>
 /// <returns></returns>
 public static Slice ReadSlice(BinaryReader br)
 {
     byte[] bs;
     Slice slice = new Slice();
     slice.index = br.ReadInt32();
     slice.start = br.ReadInt64();
     slice.totalSize = br.ReadInt64();
     slice.doneSize = br.ReadInt64();
     slice.status = (SliceStatus)br.ReadInt32();
     int len = br.ReadInt32();
     if (len > 0)
     {
         bs = br.ReadBytes(len);
         slice.md5 = Encoding.UTF8.GetString(bs).Trim('\0').Trim();
     }
     return slice;
 }
Exemplo n.º 3
0
 /// <summary>
 /// 写入一个分片
 /// </summary>
 /// <param name="br">用于写入数据的流</param>
 /// <param name="slice">待写入的分片</param>
 public static void WriteSlice(BinaryWriter br, Slice slice)
 {
     byte[] bs;
     br.Write(slice.index);
     br.Write(slice.start);
     br.Write(slice.totalSize);
     br.Write(slice.doneSize);
     br.Write((int)slice.status);
     if (!string.IsNullOrEmpty(slice.md5))
     {
         bs = Encoding.UTF8.GetBytes(slice.md5);
         br.Write(bs.Length);
         br.Write(bs);
     }
     else
     {
         br.Write((int)0);
     }
 }