You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C#编程访问Windows系统的「此电脑」目录?

C# 访问Windows「此电脑」目录的实现方法

首先明确核心前提:Windows系统中的「此电脑」(旧称「我的电脑」)不属于文件系统中的实体目录,是Windows Shell命名空间下的虚拟节点,不存在传统的文件系统路径,因此无法直接通过Directory、DriveInfo这类仅支持实体文件系统路径的API访问,需要通过Shell相关接口操作。

可行实现方案

方案1:通过Shell COM对象访问(推荐,和资源管理器展示内容完全一致)

「此电脑」对应的Shell解析名为固定CLSID路径:::{20D04FE0-3AEA-1069-A2D8-08002B30309D},可以直接通过Shell.Application COM对象拿到节点引用,枚举内部所有项。

  • 无COM引用的动态实现(兼容.NET Framework/.NET Core/.NET 5+,无需手动添加引用)
// 从ProgID创建Shell应用实例
Type shellType = Type.GetTypeFromProgID("Shell.Application");
dynamic shellApp = Activator.CreateInstance(shellType);
// 传入此电脑的CLSID路径,获取对应文件夹对象
dynamic thisPcNode = shellApp.NameSpace("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}");

// 枚举此电脑下所有可见项
foreach (dynamic item in thisPcNode.Items())
{
    // 可获取项的名称、类型、实体路径等属性
    Console.WriteLine($"项名称:{item.Name},项类型:{item.Type},对应路径:{item.Path}");
}
  • 如果需要强类型开发,可以手动添加COM引用「Microsoft Shell Controls and Automation」,用强类型的Shell、Folder、FolderItem类替代动态类型,开发时可以获得智能提示。

这种方式拿到的枚举结果和资源管理器打开「此电脑」看到的内容完全一致,除了DriveInfo.GetDrives()能获取到的本地硬盘、光驱、可移动存储外,还能拿到钉在此电脑下的用户文件夹(文档、下载、图片等)、映射网络驱动器、网络位置等非驱动器虚拟项。

注意事项

  • 不要将此电脑的CLSID路径传入Directory、DirectoryInfo、File等传统文件IO类,这类API仅支持实体文件系统路径,传入虚拟路径会直接抛出路径不合法的异常。
  • 如果仅需要获取驱动器列表,DriveInfo.GetDrives()已经足够;如果需要完全复刻资源管理器「此电脑」层级的展示内容,必须使用Shell接口方案。

内容的提问来源于stack exchange,提问作者Kg Ro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 20:21:37