private byte[] GetContent(long size, long addr, int dcount) { long dblock = addr + len_fheader; int left = (int)(size % 1024); byte[] _dat = new byte[size]; fs.Seek(dblock, SeekOrigin.Begin); for (int i = 0; i < dcount; i++) { Array.Copy(GetBlock().FB_DAT, 0, _dat, i * 1024, (i == dcount - 1 && left != 0) ? left : 1024); OnChuckOperated?.Invoke(i, dcount); } return(_dat); }
private void _writeBlocks(byte[] b, int bcount) { int paddingBytes = b.Length % 1024; int index = 0; for (int i = 0; i < bcount; i++) { LPS_FBLOCK lfb = new LPS_FBLOCK(); lfb.FB_INDEX = index; bool bl = i == bcount - 1 && paddingBytes != 0; lfb.FB_DAT = new byte[1024]; Array.Copy(b, i * 1024, lfb.FB_DAT, 0, bl ? paddingBytes : 1024); fs.Write(lfb.ToBytes(len_dblock).XorCrypt(magic), 0, len_dblock); index++; OnChuckOperated?.Invoke(index, bcount); } }