Voici une petite application qui utilise un échantillonnage approfondi pour rechercher des tumeurs dans n'importe quel disque ou répertoire. Il parcourt l'arborescence de répertoires à deux reprises, une fois pour la mesurer, et une deuxième fois pour imprimer les chemins d'accès à 20 octets "aléatoires" dans le répertoire.
void walk(string sDir, int iPass, int64& n, int64& n1, int64 step){
foreach(string sSubDir in sDir){
walk(sDir + "/" + sSubDir, iPass, n, n1, step);
}
foreach(string sFile in sDir){
string sPath = sDir + "/" + sFile;
int64 len = File.Size(sPath);
if (iPass == 2){
while(n1 <= n+len){
print sPath;
n1 += step;
}
}
n += len;
}
}
void dscan(){
int64 n = 0, n1 = 0, step = 0;
// pass 1, measure
walk(".", 1, n, n1);
print n;
// pass 2, print
step = n/20; n1 = step/2; n = 0;
walk(".", 2, n, n1);
print n;
}
La sortie ressemble à ceci pour mon répertoire Program Files:
7,908,634,694
.\ArcSoft\PhotoStudio 2000\Samples\3.jpg
.\Common Files\Java\Update\Base Images\j2re1.4.2-b28\core1.zip
.\Common Files\Wise Installation Wizard\WISDED53B0BB67C4244AE6AD6FD3C28D1EF_7_0_2_7.MSI
.\Insightful\splus62\java\jre\lib\jaws.jar
.\Intel\Compiler\Fortran\9.1\em64t\bin\tselect.exe
.\Intel\Download\IntelFortranProCompiler91\Compiler\Itanium\Data1.cab
.\Intel\MKL\8.0.1\em64t\bin\mkl_lapack32.dll
.\Java\jre1.6.0\bin\client\classes.jsa
.\Microsoft SQL Server\90\Setup Bootstrap\sqlsval.dll
.\Microsoft Visual Studio\DF98\DOC\TAPI.CHM
.\Microsoft Visual Studio .NET 2003\CompactFrameworkSDK\v1.0.5000\Windows CE\sqlce20sql2ksp1.exe
.\Microsoft Visual Studio .NET 2003\SDK\v1.1\Tool Developers Guide\docs\Partition II Metadata.doc
.\Microsoft Visual Studio .NET 2003\Visual Studio .NET Enterprise Architect 2003 - English\Logs\VSMsiLog0A34.txt
.\Microsoft Visual Studio 8\Microsoft Visual Studio 2005 Professional Edition - ENU\Logs\VSMsiLog1A9E.txt
.\Microsoft Visual Studio 8\SmartDevices\SDK\CompactFramework\2.0\v2.0\WindowsCE\wce500\mipsiv\NETCFv2.wce5.mipsiv.cab
.\Microsoft Visual Studio 8\VC\ce\atlmfc\lib\armv4i\UafxcW.lib
.\Microsoft Visual Studio 8\VC\ce\Dll\mipsii\mfc80ud.pdb
.\Movie Maker\MUI\0409\moviemk.chm
.\TheCompany\TheProduct\docs\TheProduct User's Guide.pdf
.\VNI\CTT6.0\help\StatV1.pdf
7,908,634,694
Il me dit que le répertoire est 7.9gb, dont
- ~ 15% vont au compilateur Intel Fortran
- ~ 15% vont à VS .NET 2003
- ~ 20% vont au VS 8
Il est assez simple de demander si l’un d’entre eux peut être déchargé.
Il indique également les types de fichiers distribués dans le système de fichiers, mais pris ensemble, ils représentent une opportunité pour économiser de l'espace:
- Environ 15% vont approximativement aux fichiers .cab et .MSI
- Environ 10% vont grossièrement à la journalisation de fichiers texte
Cela montre beaucoup d'autres choses là-dedans aussi, dont je pourrais probablement me passer, comme le support "SmartDevices" et "ce" (~ 15%).
Cela prend du temps linéaire, mais cela ne doit pas être fait souvent.
Exemples de choses qu'il a trouvé:
- des copies de sauvegarde des DLL dans de nombreux référentiels de code enregistrés, qui n'ont pas vraiment besoin d'être enregistrées
- une copie de sauvegarde du disque dur de quelqu'un sur le serveur, sous un répertoire obscur
- volumineux fichiers Internet temporaires
- anciens fichiers de documentation et d'aide depuis longtemps nécessaires