Ось крихітний додаток, який використовує глибоку вибірку для пошуку новоутворень на будь-якому диску чи каталозі. Він ходить по дереву каталогів двічі, один раз для його вимірювання, а другий раз для друку шляхів до 20 «випадкових» байтів під каталогом.
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;
}
Вихід виглядає так для мого каталогу програмних файлів:
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
Це говорить мені, що каталог 7,9 Гб, з яких
- ~ 15% йде на компілятор Intel Fortran
- ~ 15% йде на VS .NET 2003
- ~ 20% йде на VS 8
Досить просто запитати, чи можна щось із них вивантажити.
Він також розповідає про типи файлів, які поширюються по всій файловій системі, але взяті разом представляють можливість економії місця:
- ~ 15% приблизно відповідає файлам .cab та .MSI
- ~ 10% приблизно відповідає журналу текстових файлів
Це також показує безліч інших речей, які я, ймовірно, не міг би обійтися, як-от підтримка SmartDevices і "ce" (~ 15%).
Це займає лінійний час, але це не потрібно робити часто.
Приклади речей, які він знайшов:
- резервні копії DLL-файлів у багатьох збережених сховищах коду, які насправді не потрібно зберігати
- резервна копія чужого жорсткого диска на сервері під неясним каталогом
- об'ємні тимчасові інтернет-файли
- стародавній документ і довідкові файли, давно вже потрібні