2017-07-31 6 views
0

を解放しません。たとえば、ループ内のフォルダを削除して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 
関連する問題