public void Remove()
{
Dictionary<uint, File> newFiles;
Dictionary<uint, File> oldFiles;
do
{
oldFiles = _owner._files;
File value;
if (!oldFiles.TryGetValue(_index, out value)) return;
newFiles = new Dictionary<uint, File>(oldFiles);
newFiles.Remove(_index);
} while (Interlocked.CompareExchange(ref _owner._files, newFiles, oldFiles) != oldFiles);
_stream.Dispose();
_owner.DeleteFileCollectionStrategy.DeleteFile(_fileName);
}
}