Windows下如何创建自定义虚拟文件夹并按规则聚合展示分散存储的文件
Windows资源管理器自定义虚拟文件视图的实现方案
按实现成本从低到高排序,可根据自身需求选择:
1. 原生Windows库+保存搜索条件(零代码,优先推荐)
Windows 7及以上系统自带的「库」功能完全可以满足基础的聚合筛选需求:
- 打开资源管理器左侧导航栏的「库」入口,右键新建自定义库,将所有需要纳入聚合范围的文件夹添加为库的位置
- 在库的顶部搜索框输入你需要的筛选规则,例如要筛选所有小于100KB的zip文件,直接输入
*.zip size:<100KB - 筛选结果出来后,点击顶部搜索选项卡的「保存搜索」,就能把当前筛选规则保存为可直接访问的快捷方式,下次点击就能直接看到符合条件的所有文件,和访问普通文件夹体验完全一致。
这个方案不需要任何开发,所有操作都是系统原生支持,性能和兼容性最好。
2. 符号链接批量聚合(少量代码,静态规则适用)
如果你需要的是固定的文件子集,不需要动态变更筛选规则,可以用批量创建符号链接的方式实现:
- 用C#写个简单的遍历程序,扫描所有目标文件夹,筛选出符合条件的文件,调用Win32 API
CreateSymbolicLink或者系统命令mklink,在你指定的实体文件夹下创建所有符合条件的文件的软链接 - 软链接不占用额外存储空间,访问、修改软链接完全等价于操作原文件,删除软链接也不会影响原文件,资源管理器访问这个聚合文件夹和普通文件夹没有任何区别。
3. Projected File System (ProjFS) 动态虚拟文件系统(自定义开发首选)
如果你需要实现复杂的动态筛选逻辑、自定义文件展示规则,微软官方提供的ProjFS是替代传统命名空间扩展的最佳方案,完全不需要付费第三方库:
- ProjFS是Windows 10 1809及以上版本原生支持的虚拟文件系统API,专门用来实现资源管理器内的虚拟文件视图,不需要开发复杂的COM命名空间扩展
- C#可以直接通过NuGet包
Microsoft.Windows.ProjFS进行开发,官方提供完整的示例代码和开发文档,只需要实现规则匹配、文件元数据返回的逻辑,就能把你自定义的文件列表投影到任意一个本地文件夹路径下,用户在资源管理器看到的就是符合你规则的文件子集,所有常规操作(打开、复制、删除)都可以自定义处理逻辑。 - 相比传统命名空间扩展,ProjFS不需要处理复杂的COM互操作,也不存在.NET运行时注入资源管理器进程的兼容性问题,是微软官方推荐的替代方案。
不推荐使用命名空间扩展的原因
传统命名空间扩展基于COM架构,本身设计复杂、调试难度高,而且C#开发的进程内COM插件注入资源管理器原生进程时,极易出现.NET运行时版本冲突问题,微软官方此前也明确不推荐用.NET开发命名空间扩展,现有实现基本都依赖付费第三方封装库,没有必要选择。
内容的提问来源于stack exchange,提问作者Yekoor
相关产品推荐
相关产品推荐

