Changeset 406


Ignore:
Timestamp:
9/27/2008 5:09:24 AM (6 years ago)
Author:
lowjoel
Message:

Upgrade the EraseFilesystemRecords? function to support non-drive mountpoints.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eraser6/Manager/DirectExecutor.cs

    r405 r406  
    424424                //Determine the total amount of data that needs to be written. 
    425425                WriteStatistics statistics = new WriteStatistics(); 
    426                 Volume driveInfo = Volume.FromMountpoint(target.Drive); 
    427                 long totalSize = method.CalculateEraseDataSize(null, driveInfo.TotalFreeSpace); 
     426                Volume volInfo = Volume.FromMountpoint(target.Drive); 
     427                long totalSize = method.CalculateEraseDataSize(null, volInfo.TotalFreeSpace); 
    428428 
    429429                //Continue creating files while there is free space. 
    430430                eventArgs.currentItemName = "Unused space"; 
    431431                task.OnProgressChanged(eventArgs); 
    432                 while (driveInfo.AvailableFreeSpace > 0) 
     432                while (volInfo.AvailableFreeSpace > 0) 
    433433                { 
    434434                    //Generate a non-existant file name 
     
    446446                        //or the maximum size of one of these dumps. 
    447447                        stream.SetLength(Math.Min(ErasureMethod.FreeSpaceFileUnit, 
    448                             driveInfo.AvailableFreeSpace)); 
     448                            volInfo.AvailableFreeSpace)); 
    449449 
    450450                        //Then run the erase task 
     
    622622        private void EraseFilesystemRecords(DirectoryInfo info, ErasureMethod method) 
    623623        { 
    624             DriveInfo driveInfo = new DriveInfo(info.Root.FullName); 
    625             string driveFormat = driveInfo.DriveFormat; 
    626             if (driveFormat == "NTFS") 
     624            Volume volInfo = Volume.FromMountpoint(info.FullName); 
     625            string volFormat = volInfo.VolumeFormat; 
     626            if (volFormat == "NTFS") 
    627627            { 
    628628                //If the volume is full, squeeze one-byte files. 
    629629                try 
    630630                { 
    631                     FileInfo mftInfo = new FileInfo(driveInfo.RootDirectory.FullName + 
    632                         Path.DirectorySeparatorChar + "$MFT"); 
     631                    StreamInfo mftInfo = new StreamInfo(Path.Combine(volInfo.VolumeID, "$MFT")); 
    633632                    long oldMFTSize = mftInfo.Length; 
    634633                    for ( ; ; ) 
    635634                    { 
    636635                        //Open this stream 
    637                         using (FileStream strm = new FileStream(info.FullName + 
    638                             Path.DirectorySeparatorChar + GenerateRandomFileName(18), 
     636                        using (FileStream strm = new FileStream(Path.Combine( 
     637                            info.FullName, GenerateRandomFileName(18)), 
    639638                            FileMode.CreateNew, FileAccess.Write)) 
    640639                        { 
     
    650649                        //Determine if we can stop. We will stop if the disk is not 
    651650                        //full and the MFT has grown in size. 
    652                         if (driveInfo.TotalFreeSpace != 0 && mftInfo.Length != oldMFTSize) 
     651                        if (volInfo.AvailableFreeSpace != 0 && mftInfo.Length != oldMFTSize) 
    653652                            break; 
    654653                    } 
Note: See TracChangeset for help on using the changeset viewer.