/// <summary> /// Deletes the specified position. /// </summary> /// <param name="position">The position.</param> public void Delete(long position) { lock (_writeLock) { if (FreeBlocks.Any(fb => fb.Equals(position))) { return; } Write(position, Encoding.ASCII.GetString(new byte[MaxBlockSize])); FreeBlocks.Add(position); BlocksFree++; Save(); } }
public void FreeBlock(int blockId) { VerifyValidDataBlock(blockId); IsChanged = true; var chainedBlock = _blocks[blockId]; if (AllocatedBlocks.Contains(blockId) || InitialFreeBlocks.Contains(blockId)) { foreach (var id in chainedBlock.BlockIds) { FreeBlocks.Add(id); } } else { foreach (var id in chainedBlock.BlockIds) { GarbageBlocks.Add(id); } } _blocks.Remove(blockId); }