private bool DeleteInternal(Folder f, ref long progressUpdate, ref long progressMax, ref string CurrentFile) { uint[] Occupied = f.BlocksOccupied; //Set the max progress progressMax = Occupied.Length; foreach (File g in f.Files(false)) { progressMax += (uint)g.BlocksOccupied.Length; } foreach (Folder g in f.SubFolders(false)) { progressMax += (uint)g.BlocksOccupied.Length; } //Set progress update progressUpdate = 0; //Mark the blocks as empty ClearFATChain(Occupied, f); progressUpdate++; foreach (Folder g in f.SubFolders(false)) { DeleteInternal(g, ref progressUpdate, ref progressMax, ref CurrentFile); } foreach (File g in f.Files(false)) { ClearFATChain(g.BlocksOccupied, g); progressUpdate++; } return true; }