Exemplo n.º 1
0
      public override void EraseDirectoryStructures(VolumeInfo info,
 FileSystemEntriesEraseProgress callback)
      {
          using (FileStream stream = info.Open(FileAccess.ReadWrite, FileShare.ReadWrite))
             {
          int directoriesCleaned = 0;
          FatApi api = GetFatApi(info, stream);
          HashSet<uint> eraseQueueClusters = new HashSet<uint>();
          List<FatDirectoryEntry> eraseQueue = new List<FatDirectoryEntry>();
          {
           FatDirectoryEntry entry = api.LoadDirectory(string.Empty);
           eraseQueue.Add(entry);
           eraseQueueClusters.Add(entry.Cluster);
          }
          using (VolumeLock volumeLock = info.LockVolume(stream))
          {
           while (eraseQueue.Count != 0)
           {
            if (callback != null)
             callback(directoriesCleaned, directoriesCleaned + eraseQueue.Count);
            FatDirectoryBase currentDir = api.LoadDirectory(eraseQueue[0].FullName);
            eraseQueue.RemoveAt(0);
            foreach (KeyValuePair<string, FatDirectoryEntry> entry in currentDir.Items)
             if (entry.Value.EntryType == FatDirectoryEntryType.Directory)
             {
          if (eraseQueueClusters.Contains(entry.Value.Cluster))
           continue;
          eraseQueueClusters.Add(entry.Value.Cluster);
          eraseQueue.Add(entry.Value);
             }
            currentDir.ClearDeletedEntries();
            ++directoriesCleaned;
           }
          }
             }
      }