private byte[] ReadShortSectorDataAsBytes(int SSID) { int offset = GetShortSectorOffset(SSID); ShortStreamContainer.Seek(offset, SeekOrigin.Begin); return(StreamHelper.ReadBytes(ShortStreamContainer, ShortSectorSize)); }
internal void WriteShortStreamData(int startSID, byte[] data) { int prev_sid = SID.EOC; int sid = startSID; int index = 0; while (index < data.Length) { if (sid == SID.EOC) { if (prev_sid == SID.EOC) { sid = this.ShortSectorAllocation.AllocateSector(); } else { sid = this.ShortSectorAllocation.AllocateSectorAfter(prev_sid); } } int offset = GetShortSectorOffset(sid); ShortStreamContainer.Position = offset; if (index + ShortSectorSize < data.Length) { ShortStreamContainer.Write(data, index, ShortSectorSize); } else { ShortStreamContainer.Write(data, index, data.Length - index); } index += ShortSectorSize; prev_sid = sid; sid = this.ShortSectorAllocation.GetNextSectorID(prev_sid); } if (sid != SID.EOC && prev_sid != SID.EOC) { ShortSectorAllocation.LinkSectorID(prev_sid, SID.EOC); while (sid != SID.EOC) { int next_sid = ShortSectorAllocation.GetNextSectorID(sid); ShortSectorAllocation.LinkSectorID(sid, SID.Free); sid = next_sid; } } }