Đây là một ứng dụng nhỏ sử dụng lấy mẫu sâu để tìm khối u trong bất kỳ đĩa hoặc thư mục nào. Nó đi trên cây thư mục hai lần, một lần để đo nó và lần thứ hai để in ra các đường dẫn đến 20 byte "ngẫu nhiên" trong thư mục.
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;
}
Đầu ra trông như thế này cho thư mục Tệp chương trình của tôi:
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
Nó cho tôi biết rằng thư mục là 7.9gb, trong đó
- ~ 15% vào trình biên dịch Intel Fortran
- ~ 15% vào VS .NET 2003
- ~ 20% chuyển đến VS 8
Nó là đủ đơn giản để hỏi nếu bất kỳ trong số này có thể được dỡ xuống.
Nó cũng cho biết về các loại tệp được phân phối trên toàn hệ thống tệp, nhưng được kết hợp với nhau thể hiện cơ hội tiết kiệm không gian:
- ~ 15% đại khái là tập tin .cab và .MSI
- ~ 10% đại khái là đi đến đăng nhập tệp văn bản
Nó cũng cho thấy rất nhiều thứ khác trong đó, mà tôi có thể làm mà không cần, như hỗ trợ "SmartDevices" và "ce" (~ 15%).
Nó mất thời gian tuyến tính, nhưng nó không phải được thực hiện thường xuyên.
Ví dụ về những điều nó đã tìm thấy:
- sao lưu các bản sao của DLL trong nhiều kho lưu trữ mã, mà thực sự không cần phải lưu
- một bản sao lưu ổ cứng của ai đó trên máy chủ, trong một thư mục tối nghĩa
- tập tin internet tạm thời đồ sộ
- tài liệu cổ xưa và các tập tin trợ giúp quá khứ là cần thiết