Changeset 1221


Ignore:
Timestamp:
9/29/2009 2:46:01 PM (5 years ago)
Author:
lowjoel
Message:

Implemented erasing directory structures (for FAT32)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/eraser6/Eraser.DefaultPlugins/FileSystems/Fat.cs

    r1210 r1221  
    9292            FileSystemEntriesEraseProgress callback) 
    9393        { 
    94             Fat32Api api = new Fat32Api(info); 
     94            using (FileStream stream = info.Open(FileAccess.ReadWrite, FileShare.ReadWrite)) 
     95            { 
     96                int directoriesCleaned = 0; 
     97                Fat32Api api = new Fat32Api(info, stream); 
     98                HashSet<uint> eraseQueueClusters = new HashSet<uint>(); 
     99                List<FatDirectoryEntry> eraseQueue = new List<FatDirectoryEntry>(); 
     100                { 
     101                    FatDirectoryEntry entry = api.LoadDirectory(string.Empty); 
     102                    eraseQueue.Add(entry); 
     103                    eraseQueueClusters.Add(entry.Cluster); 
     104                } 
     105 
     106                using (VolumeLock volumeLock = info.LockVolume(stream)) 
     107                { 
     108                    while (eraseQueue.Count != 0) 
     109                    { 
     110                        if (callback != null) 
     111                            callback(directoriesCleaned, directoriesCleaned + eraseQueue.Count); 
     112 
     113                        FatDirectory currentDir = api.LoadDirectory(eraseQueue[0].FullName); 
     114                        eraseQueue.RemoveAt(0); 
     115 
     116                        //Queue the subfolders in this directory 
     117                        foreach (KeyValuePair<string, FatDirectoryEntry> entry in currentDir.Items) 
     118                            if (entry.Value.Type == FatDirectoryEntryTypes.Directory) 
     119                            { 
     120                                //Check that we don't have the same cluster queued twice (e.g. for 
     121                                //long/8.3 file names) 
     122                                if (eraseQueueClusters.Contains(entry.Value.Cluster)) 
     123                                    continue; 
     124 
     125                                eraseQueueClusters.Add(entry.Value.Cluster); 
     126                                eraseQueue.Add(entry.Value); 
     127                            } 
     128 
     129                        currentDir.ClearDeletedEntries(); 
     130                    } 
     131                } 
     132            } 
    95133        } 
    96134    } 
Note: See TracChangeset for help on using the changeset viewer.