2017-07-31 105 views
0

当我删除使用填充文件夹中删除不释放空间立即

DirectoryInfo.Delete(true) 

值一个文件夹来

DriveInfo.AvailableFreeSpace 

几乎保持不变。例如,当我在检查availablefreespace时删除循环中的文件夹时,我最终删除了千兆字节和千兆字节的数据,当它应该删除少于一个千兆字节时。

//Delete in secondary storage 
string secondaryRoot = Path.GetPathRoot(settings.SecondaryFeatureExtractDirectory); 
DriveInfo secondaryDrive = new DriveInfo(secondaryRoot); 
DirectoryInfo secondaryInfo = new DirectoryInfo(settings.SecondaryFeatureExtractDirectory); 
while ((secondaryDrive.TotalSize - secondaryDrive.AvailableFreeSpace)/secondaryDrive.TotalSize * 100 < settings.DriveFreePercentage) 
{ 
    logger.LogInformation("checkForCleanup before delete: {@Freespace}", secondaryDrive.AvailableFreeSpace); 
    secondaryThresholdPassed = true; 
    DirectoryInfo oldestDir = secondaryInfo.EnumerateDirectories().OrderBy(x => x.LastWriteTimeUtc).FirstOrDefault(); 
    if (oldestDir == null) break; 
    oldestDir.Delete(true); 
    logger.LogDebug("checkForCleanup deleted: {@DirectoryName}", oldestDir.FullName); 
    logger.LogInformation("checkForCleanup after delete: {@Freespace}", secondaryDrive.AvailableFreeSpace); 
    Thread.Sleep(1); 

} 

有没有什么是解决此使用C#和dotnetcore?

+0

这将使用整数运算,因此它将为100或0. –

+0

@mwwhited你能解释一下吗?我不知道如何'(secondaryDrive.TotalSize - secondaryDrive.AvailableFreeSpace)/ secondaryDrive.TotalSize * 100'将被约束为0或100. – Theyouthis

+0

这些值都是整数值(真的很长......但同样的想法)。因此,他们不会有任何十进制值。想想'(100-90)/ 100'。这将等于'.9',但是是整数值,最大的整数是'0' –

回答

2

您检查的所有输入值都是整数类型。整数运算不包含数字的小数部分。

var di = //new DriveInfo("c"); 
    new 
    { 
     TotalSize = 255471906816L, 
     AvailableFreeSpace = 125059747840L 
    }; 

var ps = ((di.TotalSize - di.AvailableFreeSpace)/di.TotalSize) * 100; 
Console.WriteLine(ps); // 0 
var ps2 = (int)((((double)di.TotalSize - di.AvailableFreeSpace)/di.TotalSize) * 100d); 
Console.WriteLine(ps2); // 51