protected void SetIndexList(byte[] indexbuf) { _listIndex.Clear(); //unzip ICSharpCode.SharpZipLib.Wrapper zipwrapper = new ICSharpCode.SharpZipLib.Wrapper(); indexbuf = zipwrapper.Decompress(indexbuf); //read data to index list MemoryStream stream = new MemoryStream(indexbuf); BinaryReader breader = new BinaryReader(stream); for (int i = 0; i < indexbuf.Length / Index.StreamSize; i++) { Index item = new Index(breader); _listIndex.Add(item); } //dataffset ==-1 is the point to same block as previous one for (int i = 0; i < _listIndex.Count; i++) { if (_listIndex[i].DataOffset == -1 && i > 0) { _listIndex[i].ChangeDataOffsetLength(_listIndex[i - 1].DataOffset, _listIndex[i - 1].DataLength); } } _listIndex.Sort(); }