WinDirStat 磁盘占用分析完全指南:扫描流程、重复文件检测、命令行导出与安装构建
桌面应用数据可视化【免费下载链接】windirstatWindows disk usage analyzer and cleanup tool with interactive treemaps, large-file discovery, duplicate detection, and file-system monitoring.项目地址https://gitcode.com/gh_mirrors/wi/windirstat点击查看免费下载导读WinDirStatWindows Directory Statistics是一款面向 Microsoft Windows 的磁盘空间使用分析与清理辅助工具其核心价值在于扫描驱动器、文件夹、网络共享乃至 MTP 设备后通过可排序文件列表、文件类型统计与交互式矩形树图treemap、旭日图sunburst和火焰图flame graph直观呈现空间去向。本文以仓库根目录的 README.md 为主线结合 windirstat/WinDirStat.cpp、windirstat/WinDirStatModel.Actions.cpp、windirstat/CsvLoader.cpp 等源码系统讲解扫描与可视化的操作流程、/SaveTo等命令行导出模式、重复文件检测原理、删除文件恢复能力以及安装与从源码构建的完整方案。读完本文你将能独立完成一次扫描 → 定位大文件 → 查找重复文件 → 导出报告 → 清理或恢复的完整实战。核心功能总览WinDirStat 不是单一功能的磁盘占用统计器而是一条完整的存储分析工作链。根据 README 的 Major features 一节其能力可归纳为六类多源扫描可同时扫描多个驱动器或多个文件夹支持暂停/恢复、刷新以管理员身份运行时本地 NTFS 卷可使用加速扫描模式。多维度可视化可探索最大文件、文件类型分布、逻辑大小与物理大小差异、硬链接以及空闲/未知空间矩形树图、旭日图、火焰图均可配置。搜索与过滤按名称、大小、文件/文件夹类型或所有者搜索已扫描结果扫描前可按路径、名称、大小或使用年限过滤且支持正则表达式。重复文件检测使用可配置的哈希算法并带有云端文件占位文件防护可选的稀疏哈希模式会把抽样匹配的结果标记为Probable duplicates疑似重复。权限与成本分析可检查文件与文件夹的权限条目ACL并按文件修改年限估算存储分层存储层级成本。监控、导出与清理监视文件系统变更将扫描结果保存/加载为 CSV 或 JSON从命令行导出扫描、重复文件或权限报告可打开、移动、删除文件运行 Windows 清理工具、NTFS 压缩、硬链接去重与自定义清理命令。界面定制可定制布局、列、颜色、字体与工具栏尺寸支持深色模式、便携式设置、多语言翻译与 Explorer资源管理器集成。从源码结构看上述能力分别落在 windirstat/Controls列表与图控件、windirstat/Views视图层、windirstat/FinderNtfs.cppNTFS 加速扫描、windirstat/FinderMtp.cppMTP 设备与 windirstat/Item.Extended.cpp哈希与硬链接处理等模块中。快速上手从选择扫描源到导出快照README 的 Getting started 给出了官方推荐的四步工作流这里逐条展开并补充源码层面的印证。第一步选择扫描源启动后在Select Drives选择驱动器对话框中确定扫描范围勾选驱动器或点击添加文件夹按钮选择Individual Folders单个文件夹多个文件夹可以同时扫描已连接的 MTP 设备如手机、相机会出现在Individual Drives单个驱动器分组下这一行为与 windirstat/FinderMtp.cpp 中通过IPortableDeviceManager枚举 WPD 设备、再以IShellItem绑定 shell 路径的实现对应命令行传入的扫描目标同样支持多路径见 windirstat/WinDirStat.cpp非 flag 参数会被逐个规范化并追加到路径列表。第二步按需开启重复文件检测与提权扫描Scan for duplicate files扫描重复文件选项仅在你确实需要查找重复内容时开启——哈希过程会读取文件内容增加磁盘 I/O 与扫描耗时。这一点在源码中有直接体现windirstat/WinDirStat.cpp 在命令行保存模式下会自动切换该选项/SaveTo时关闭、/SaveDupesTo时开启说明重复检测属于独立的、可选的计算阶段。需要全盘加速扫描 NTFS 时使用File Run Elevated以管理员身份运行。提权后可直接读取卷的 MFT主文件表而非逐目录枚举相关实现见 windirstat/FinderNtfs.cpp它直接以CreateFile打开卷名\$\MFT::$DATA按 512 字节扇区应用 USN fixup 后逐条解析 MFT 记录。提权能力封装在 windirstat/HelpersTasks.cpp 的IsElevationAvailable()/RunElevated()中并受 windirstat/Options.h 中AutoElevate、ShowElevationPrompt等选项控制。第三步浏览结果与切换可视化在All Files全部文件列表排序或直接打开Largest Files最大文件视图选中一个条目即可在可视化图中定位其位置使用CtrlF调起搜索按名称、大小、类型、所有者等条件检索右键列标题可自定义显示列使用View菜单切换图形矩形树图、旭日图、火焰图。菜单命令路由位于 windirstat/MainFrame.Commands.cppSelectGraphPane、OnViewFlameGraph、OnViewSunburst对应视图类分别为 windirstat/Views/TreeMapView.h、windirstat/Views/SunburstView.h、windirstat/Views/FlameGraphView.h 与 windirstat/Views/StorageAnalyticsView.h。第四步清理前核对清理后刷新在资源管理器中复核待清理条目后再执行操作清理后刷新受影响的扫描结果使统计回归真实使用File Save Results To CSV/JSON将结果保存为 CSV/JSON保留一份扫描快照便于后续对比或归档。此外WinDirStat 还提供文件系统变更监视扫描完成后可开启监视底层通过ReadDirectoryChangesW递归监听目录变更见 windirstat/Controls/FileWatcherControl.cpp新增、删除、修改的文件会实时反映到监视列表。命令行模式无人值守扫描与报告导出README 明确指出脚本场景下使用/SaveTo、/SaveDupesTo或/SavePermsTo后跟输出文件名与扫描目标保存模式写入报告后立即退出/LoadFrom则重新打开已保存的扫描。这一部分的参数解析实现在 windirstat/WinDirStat.cpp 的ParseParam中源码揭示了比 README 更精确的行为细节。参数解析规则源码级flag 不区分大小写解析时统一MakeLower归一化四个操作 flagsaveToFlag/SaveTo、saveDupesToFlag/SaveDupesTo、savePermsToFlag/SavePermsTo、loadFromFlag/LoadFrom被定义为 operationFlags 数组每个操作 flag 之后必须紧跟一个非 flag 参数作为其值禁止重复操作若命令行中出现多个操作 flag例如同时/SaveTo与/LoadFrom会被标记为 malformedm_malformedFlag程序直接ExitProcess(1)扫描目标所有非 flag 参数按空格切分SplitString逐个校验为存在的文件夹后追加到目标列表多个路径以管道符|连接MTP 的 shell 路径::前缀走FinderMtp::IsPath/DoesFileExist分支不做文件系统规范化静默模式存在任一保存 flag 时窗口以SW_HIDE隐藏windirstat/WinDirStat.cpp若静默模式下没有扫描目标或目标路径无效立即以退出码 1 终止重复检测联动/SaveTo时强制关闭重复扫描COptions::ScanForDuplicates false/SaveDupesTo时强制开启——这与第二步中按需开启去重的交互逻辑完全一致退出码契约导出成功返回 0、失败返回 1便于脚本判断。常用命令示例:: 扫描 C 盘并把完整结果导出为 CSV完成后自动退出 WinDirStat.exe /SaveTo results.csv C:\ :: 同时扫描两个文件夹并导出多个目标以空格分隔 WinDirStat.exe /SaveTo results.csv C:\Users\Me\Documents D:\Data :: 扫描并导出重复文件报告JSON此模式自动开启重复检测 WinDirStat.exe /SaveDupesTo dupes.json D:\Data :: 导出指定路径的权限条目报告 WinDirStat.exe /SavePermsTo perms.csv C:\Program Files :: 直接加载此前保存的扫描结果不发起新扫描 WinDirStat.exe /LoadFrom results.json导出与加载的底层实现导出的执行点在 windirstat/WinDirStatModel.Actions.cpp/SaveTo→SaveResults(path, rootItem)/SaveDupesTo→ 先在消息线程中SortItems()排序重复列表再SaveDuplicates(path, dupeRoot)/SavePermsTo→ 无界面扫描权限树CFilePermsControl::ScanTree后SavePermissions(path, rows)。格式选择在 windirstat/CsvLoader.cppLoadResults依据扩展名分发到 JSON 或 CSV 解析器并自动跳过 UTF-8 BOM使用 1 MiB 输入缓冲。从 windirstat/CsvLoader.cpp 的 JSON 字段可知扫描结果报告包含name名称/路径、files文件数、folders文件夹数、sizeLogical逻辑大小、sizePhysical物理大小、attributes属性、lastChange最后修改时间可选owner所有者重复文件报告windirstat/CsvLoader.cpp则包含hash、path、逻辑/物理大小、修改时间、属性以及sampled标志——即该重复组是否来自抽样哈希对应界面的Probable duplicates标记。重复文件检测哈希算法与稀疏抽样README 提到可配置哈希 云文件防护 可选稀疏哈希Probable duplicates源码将其落到了三个层次算法选择与默认值windirstat/HelpersTasks.h 定义了两种可用算法HASH_MD5基于 BCrypt 的 MD5HASH_XXHASH内嵌 xxHash 实现的 XXH364 位默认选项。windirstat/Options.h 中FileHashAlgorithm默认值为HASH_XXHASH取值范围[HASH_MD5, HASH_XXHASH]SampleLargeFiles默认false即默认全量哈希LargeFileCount默认 50控制最大文件列表的条目数。哈希计算细节windirstat/Item.Extended.cpp 的CItem::GetFileHash展示了完整的哈希管线xxHash 路径使用线程本地XXH3_state_t*XXH3_64bits_update增量更新XXH64_canonicalFromHash输出 8 字节规范字节序摘要BCrypt 路径BCryptOpenAlgorithmProvider打开算法句柄并以BCRYPT_HASH_REUSABLE_FLAG创建可复用哈希对象读满 1 MiB 缓冲后BCryptHashData更新哈希截断最终仅保留前 16 字节作为存储哈希——注释明确说明去重检查不需要如此高的唯一性SHA512 在 Windows 上符合 FIPS 且比 SHA256 更快但截断后更省空间云文件防护与流读取打开文件使用FILE_FLAG_BACKUP_SEMANTICS抽样模式或FILE_FLAG_SEQUENTIAL_SCAN顺序模式MTP 文件则通过 shellBHID_Stream绑定到IStream读取见 windirstat/HelpersTasks.cpp。稀疏哈希Probable duplicates当启用SampleLargeFiles后见 windirstat/Options.h抽样逻辑在 windirstat/Item.Extended.cpp抽样总量固定为4 MiBsampled ? 4ull * wds::Mi : hashSizeLimit采样策略为完整前缀 三个均匀间隔的 1 MiB 块最后一块直达文件末尾const auto span GetSizeLogical() - wds::Mi; offset span / 3 * block ...读取采用FILE_FLAG_RANDOM_ACCESS用SetFilePointerEx/stream-Seek定位抽样结果在界面与导出报告中标记为Probable duplicates疑似重复windirstat/CsvLoader.cpp 的sampled字段提醒用户这些匹配可能不精确。需要说明的是抽样哈希是疑似级别的匹配若要获得可判定结论应对候选组重新做全量哈希。同时 README 强调哈希会增加文件读取因此仅在必要时开启重复检测。硬链接处理与清理工具硬链接扫描阶段按需对每个驱动器创建 Hardlinks 项并执行大小调整CreateHardlinksItem/DoHardlinkAdjustment见 windirstat/WinDirStatModel.Actions.cpp使物理大小统计不被重复计数对应选项ProcessHardlinks。NTFS 压缩与稀疏化清理任务通过DeviceIoControl下发FSCTL_SET_SPARSE与FSCTL_SET_ZERO_DATA将指定零区间去分配见 windirstat/HelpersTasks.cpp实现稀疏文件压缩。硬链接去重CreateHardlinkFromFile先在目标目录创建带 GUID 的临时链接再以MoveFileEx(MOVEFILE_REPLACE_EXISTING)原子替换目标失败时清理临时链接windirstat/HelpersTasks.cpp。删除文件恢复README 明确可在管理员权限下从本地 NTFS、exFAT 与 FAT 驱动器恢复已删除文件恢复效果取决于幸存的文件元数据与文件数据。对应源码windirstat/RecoveryShared.h 定义统一的Scan/Recover抽象与ScanResult结构并提供Open工厂按卷类型分发windirstat/RecoveryNtfs.cpp 实现 NTFS 恢复解析 MFT 记录ParseRecord、读取 MFT 运行段GetMftRuns、用卷位图判断簇空闲状态BitmapFree/ClustersFree再对每个待恢复记录调用RecoverFile另有 windirstat/RecoveryExFat.cpp 与 windirstat/RecoveryFat.cpp 对应 exFAT/FAT 卷。恢复属于高危操作删除文件的元数据或数据块一旦被覆盖就无法完整恢复建议尽早执行并把恢复目标写到其他物理卷。安装方式README 推荐的安装方式是使用包管理器——便于后续更新安装途径命令 / 入口说明Microsoft Store商店内搜索 WinDirStat由商店托管安装与更新wingetwinget install -e --id WinDirStat.WinDirStat后续更新用winget upgrade WinDirStat.WinDirStatChocolateychoco install windirstat后续更新用choco upgrade windirstatScoopscoop install extras/windirstat需先执行scoop bucket add extras仓库 setup/chocolatey 目录下存放着 Chocolatey 包的模板chocolateyinstall.ps1.template、WinDirStat.nuspec.template等供打包与本地构建参考。手动安装包与便携版本若偏好手动安装、需要便携版或想浏览旧版本与测试版可前往官方 GitHub Releases 页面下载不确定选哪个文件时64 位 MSI 安装包是通用推荐。各下载形态的适用场景如下表下载适用人群内容说明Microsoft Store 应用想要一键安装与商店托管更新的用户通过商店体验安装更新由商店管理WinDirStat-x64.msi现代 Intel/AMD 64 位 Windows PC 上的大多数用户标准 64 位安装程序加入开始菜单WinDirStat-arm64.msiWindows on ARM 设备新款 Surface、Snapdragon 笔记本等面向 ARM64 Windows 的标准安装程序WinDirStat-x86.msi较旧的 32 位 Windows 安装标准 32 位安装程序MSIX bundle需要跨 CPU 类型部署App Installer / 商店风格若发布包含.msixbundle可含多种 CPU 架构包Windows 自动选择WinDirStat.zip便携使用、测试或免安装运行解压后直接运行对应 CPU 架构的可执行文件WinDirStat.7z已装有 7-Zip 的便携用户与 zip 同类的便携压缩包体积通常更小仓库 setup/msi 下提供了 WiX 安装工程WinDirStat.wxs、Defines.wxi与多语言脚本make-multilingual.ps1setup/store 提供商店打包模板Package.appxmanifest.templatesetup/prereqs.cmd 则用于准备构建前置环境。安全警示谨防仿冒站点README 特别发出恶意软件警告WinDirStat 的知名度引来了一些复制其名称、品牌或下载文件的非官方站点这些站点可能提供过期或被篡改的文件并带来恶意软件风险。请仅通过上表列出的 Microsoft Store、包管理器渠道、官方 Releases 页面或官方网站安装团队会尽可能举报仿冒站点但下架并非总能成功。安装前请核对文件签名与来源。兼容性WinDirStat 2.x 针对以下系统开发与测试README 声明在更旧或更新的系统上可能可以运行但不提供支持Windows 7 / 8 / 8.1 / 10 / 11Windows Server 2008 R2 / 2012 / 2012 R2 / 2016 / 2019 / 2022 / 2025此外源码还体现了对旧系统的适配与安全加固启动时通过SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32)限制 DLL 搜索路径以防范 DLL 劫持仅 Windows 8 及以上生效并有 windirstat/LegacyOsCompat.cpp 承载旧系统兼容逻辑。从源码构建README 的构建说明非常简洁使用Visual Studio 2022 或更新版本加载解决方案文件 windirstat.sln 即可。仓库为构建提供了配套设施windirstat/Build/Project.props共享项目属性集中管理编译参数windirstat/Build/GitRevision.targets构建时注入 Git 修订号windirstat/windirstat.vcxproj 与 windirstat/windirstat.vcxproj.filters主工程文件与筛选器tests/ 目录提供 PowerShell 测试框架Test-WinDirStat.ps1、Run-Tests.cmd与 Harness/Scenarios 下的测试用例可用于验证构建产物的基本行为本地化文本以纯文本形式存放于 windirstat/res/langs/含lang_zh.txt、lang_zh-HK.txt等 20 余种语言由 windirstat/Localization.cpp 在运行时加载构建辅助脚本见 windirstat/Build/Compress Strings.ps1 与 windirstat/Build/Format Sources.ps1。构建前请确认已安装 C 桌面开发 工作负载及对应 Windows SDK若需复现安装包可参考 setup/msi 的 WiX 工程与 setup/prereqs.cmd。许可与资源应用本体以GPL v3 或更高版本分发许可证全文见 windirstat/res/license.txt部分源码以更宽松的条款提供。Logo 及其衍生作品采用知识共享CC BY 3.0许可Logo 文件位于 windirstat/logos/logo_256px.png另有 logo_color.svg 矢量源。近期版本变更请查阅 CHANGELOG.md历史贡献者、测试者与翻译者名单见 CONTRIBUTORS.md。更完整的使用细节如恢复文件的详细步骤、命令行与导出格式规范收录于项目官方用户指南与参考文档可从官方网站进入技术讨论可关注项目官方博客与社区频道。结语WinDirStat 的价值在于把磁盘满了这个模糊问题转化为可定位、可量化、可操作的数据交互式矩形树图让空间黑洞一目了然重复文件检测与稀疏哈希在速度与精度之间提供调节旋钮/SaveTo系列命令让扫描报告可以嵌入脚本与自动化流程NTFS/exFAT/FAT 恢复能力则覆盖了清理之外的最后一环。以 README.md 为入口结合本文梳理的源码路径无论是日常排查磁盘空间还是把扫描能力接入自己的工具链你都能快速上手并深入底层原理。赞分享桌面应用数据可视化【免费下载链接】windirstatWindows disk usage analyzer and cleanup tool with interactive treemaps, large-file discovery, duplicate detection, and file-system monitoring.项目地址https://gitcode.com/gh_mirrors/wi/windirstat点击查看免费下载相关推荐根治WinDirStat重复文件扫描崩溃从哈希冲突到线程安全的全栈修复根治WinDirStat重复文件扫描崩溃从哈希冲突到线程安全的全栈修复 问题背景重复文件扫描的稳定性挑战 你是否遇到过WinDirStat在扫描大型磁盘时突桌面应用数据可视化ZeroTermux 内置命令手册quotacheck 命令扫描与维护磁盘配额文件的完整实践ZeroTermux 内置命令手册quotacheck 命令扫描与维护磁盘配额文件的完整实践 在 ZeroTermux 中 app/src/main/ass移动开发开发工具Snyk CLI cos target 命令完全指南创建、查看与导出 COS 扫描目标Snyk CLI cos target 命令完全指南创建、查看与导出 COS 扫描目标 导读 cos target 是 Snyk AI Pentesting应用安全漏洞扫描供应链安全CLI开发工具DevSecOps上一篇终极Sorry Cypress API开发指南GraphQL接口详解与自定义扩展实战下一篇如何用4倍速语音转文字神器Faster-Whisper提升工作效率创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考