Lorsque je supprime un dossier à l'aideSuppression de dossiers remplis de fichiers ne libère pas l'espace immédiatement
DirectoryInfo.Delete(true)
la valeur pour
DriveInfo.AvailableFreeSpace
reste à peu près le même. Par exemple, lorsque je supprime des dossiers dans une boucle tout en vérifiant availablefreespace
je finis par supprimer des gigaoctets et gigaoctets de données alors qu'il aurait dû supprimer moins d'un gigaoctet.
//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);
}
Est-ce qu'il y en avait autour de ça en utilisant C# et dotnetcore?
Cela va utiliser les mathématiques entier afin qu'il il sera soit 100 ou 0. –
@mwwhited Pouvez-vous expliquer cela? Je ne comprends pas comment '(secondaryDrive.TotalSize - secondaryDrive.AvailableFreeSpace)/secondaryDrive.TotalSize * 100' serait contraint à 0 ou 100. – Theyouthis
Ces valeurs sont toutes des valeurs entières (vraiment long ... mais la même idée). En tant que tels, ils n'auront aucune valeur décimale. penser à '(100-90)/100'. Cela équivaudrait '.9' mais étant des valeurs interger le plus grand entier est' 0' –