Changeset 1865


Ignore:
Timestamp:
3/1/2010 6:37:40 AM (4 years ago)
Author:
lowjoel
Message:

When we cannot lock volumes, throw the real cause of the exception instead of a generic IOException.

Location:
trunk/eraser6
Files:
2 edited

Legend:

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

    r1802 r1865  
    8787                } 
    8888 
    89                 using (VolumeLock volumeLock = info.LockVolume(stream)) 
     89                try 
    9090                { 
    91                     while (eraseQueue.Count != 0) 
     91                    using (VolumeLock volumeLock = info.LockVolume(stream)) 
    9292                    { 
    93                         if (callback != null) 
    94                             callback(directoriesCleaned, directoriesCleaned + eraseQueue.Count); 
     93                        while (eraseQueue.Count != 0) 
     94                        { 
     95                            if (callback != null) 
     96                                callback(directoriesCleaned, directoriesCleaned + eraseQueue.Count); 
    9597 
    96                         FatDirectoryBase currentDir = api.LoadDirectory(eraseQueue[0].FullName); 
    97                         eraseQueue.RemoveAt(0); 
     98                            FatDirectoryBase currentDir = api.LoadDirectory(eraseQueue[0].FullName); 
     99                            eraseQueue.RemoveAt(0); 
    98100 
    99                         //Queue the subfolders in this directory 
    100                         foreach (KeyValuePair<string, FatDirectoryEntry> entry in currentDir.Items) 
    101                             if (entry.Value.EntryType == FatDirectoryEntryType.Directory) 
    102                             { 
    103                                 //Check that we don't have the same cluster queued twice (e.g. for 
    104                                 //long/8.3 file names) 
    105                                 if (eraseQueueClusters.Contains(entry.Value.Cluster)) 
    106                                     continue; 
     101                            //Queue the subfolders in this directory 
     102                            foreach (KeyValuePair<string, FatDirectoryEntry> entry in currentDir.Items) 
     103                                if (entry.Value.EntryType == FatDirectoryEntryType.Directory) 
     104                                { 
     105                                    //Check that we don't have the same cluster queued twice (e.g. for 
     106                                    //long/8.3 file names) 
     107                                    if (eraseQueueClusters.Contains(entry.Value.Cluster)) 
     108                                        continue; 
    107109 
    108                                 eraseQueueClusters.Add(entry.Value.Cluster); 
    109                                 eraseQueue.Add(entry.Value); 
    110                             } 
     110                                    eraseQueueClusters.Add(entry.Value.Cluster); 
     111                                    eraseQueue.Add(entry.Value); 
     112                                } 
    111113 
    112                         currentDir.ClearDeletedEntries(); 
    113                         ++directoriesCleaned; 
     114                            currentDir.ClearDeletedEntries(); 
     115                            ++directoriesCleaned; 
     116                        } 
    114117                    } 
     118                } 
     119                catch (SharingViolationException e) 
     120                { 
     121                    Logger.Log(S._("Could not erase directory entries on the volume {0} because" + 
     122                        "the volume is currently in use.")); 
    115123                } 
    116124            } 
  • trunk/eraser6/Eraser.Util/VolumeInfo.cs

    r1843 r1865  
    727727            { 
    728728                if (i > 100) 
    729                     throw new IOException("Could not lock volume."); 
     729                    throw Win32ErrorCode.GetExceptionForWin32Error(Marshal.GetLastWin32Error())); 
    730730                System.Threading.Thread.Sleep(100); 
    731731            } 
Note: See TracChangeset for help on using the changeset viewer.