Changeset 2108 for trunk/eraser


Ignore:
Timestamp:
5/15/2010 4:37:21 AM (5 years ago)
Author:
lowjoel
Message:

Addresses #60: Eraser Secure Cut.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/eraser/Eraser.DefaultPlugins/ErasureTargets/SecureMoveErasureTarget.cs

    r2107 r2108  
    9797                return result; 
    9898 
     99            FileInfo[] files = null; 
    99100            if ((File.GetAttributes(Path) & FileAttributes.Directory) == 0) 
     101                files = new FileInfo[] { new FileInfo(Path) }; 
     102            else 
     103                files = GetFiles(new DirectoryInfo(Path)); 
     104 
     105            foreach (FileInfo info in files) 
    100106            { 
    101                 FileInfo info = new FileInfo(Path); 
    102  
    103107                //Add the alternate data streams 
    104108                result.AddRange(GetPathADSes(info)); 
     
    106110                //And the file itself 
    107111                result.Add(new StreamInfo(info.FullName)); 
    108             } 
    109             else 
    110             { 
    111  
    112112            } 
    113113 
     
    138138                    CopyFile(info); 
    139139                } 
    140  
    141                 //Then erase the source paths. 
    142                 base.Execute(); 
    143140            } 
    144141            finally 
     
    179176 
    180177                //We need to erase the partially copied copy of the file. 
    181                 Task task = new Task(); 
    182                 FileErasureTarget fileTarget = new FileErasureTarget(); 
    183                 fileTarget.Path = Destination; 
    184                 task.Targets.Add(fileTarget); 
     178                FileInfo copiedFile = new FileInfo(Destination); 
     179                List<StreamInfo> streams = new List<StreamInfo>( 
     180                    copiedFile.GetADSes().Select(x => new StreamInfo(copiedFile.FullName, x)); 
     181                streams.Add(new StreamInfo(copiedFile.FullName)); 
     182                long totalSize = streams.Sum(x => x.Length); 
    185183 
    186                 Progress.Steps.Add(new SteppedProgressManagerStep(task.Progress, 0.5f, 
    187                     S._("Erasing incomplete destination file"))); 
    188                 task.ProgressChanged += delegate(object sender, ProgressChangedEventArgs e) 
    189                     { 
    190                         OnProgressChanged(this, new ProgressChangedEventArgs(Progress, 
    191                             e.UserState)); 
    192                     }; 
    193  
    194                 fileTarget.Execute(); 
     184                foreach (StreamInfo stream in streams) 
     185                { 
     186                    ProgressManager destroyProgress = new ProgressManager(); 
     187                    Progress.Steps.Add(new SteppedProgressManagerStep(destroyProgress, 
     188                        0.5f * stream.Length / totalSize, 
     189                        S._("Erasing incomplete destination file"))); 
     190                    EraseStream(stream, destroyProgress); 
     191                } 
    195192 
    196193                //Rethrow the exception. 
Note: See TracChangeset for help on using the changeset viewer.