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

在C#中如何判断Windows快捷方式指向的网络路径是实际文件夹而非归档文件?

如何判断Windows快捷方式指向的是实际文件夹(排除归档文件)

你遇到的问题很典型:依赖系统语言的Type属性不可靠,IsFolder会把zip/rar这类归档误判为文件夹,同时又不能用文件系统API避免网络离线时的性能损耗。这里有个更可靠的解决方案,完全基于Shell对象的属性,不依赖语言也不会触发实际的网络访问:

核心思路是利用FolderItem的两个布尔属性:IsFolder和IsFileSystem。归档文件虽然被Shell识别为文件夹(IsFolder=true),但它们属于Shell扩展提供的虚拟项,并不是真实文件系统的一部分,所以IsFileSystem会返回false;而实际的本地文件夹或网络共享文件夹,IsFileSystem会返回true。

修改你的代码如下:

Shell shell = (Shell)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("13709620-C279-11CE-A49E-444553540000"))); 
FolderItem shortcutItem = shell.NameSpace(directoryName).ParseName(fileName); 
if (shortcutItem != null) { 
    var shellLink = (ShellLinkObject)shortcutItem.GetLink; 
    var targetItem = shellLink.Target;
    
    // 关键判断:既是文件夹,又是文件系统中的真实项
    var isActualFolder = targetItem.IsFolder && targetItem.IsFileSystem; 
    
    if (isActualFolder)
    {
        // 处理指向实际文件夹的快捷方式
    }
    else
    {
        // 排除归档或其他虚拟文件夹类型的快捷方式
    }
}

为什么这个方案有效:

  • 不依赖系统语言:IsFileSystem是布尔属性,完全不受系统区域设置或语言影响,避免了字符串匹配的问题。
  • 无性能损耗:这个判断只基于快捷方式本身存储的元数据和Shell的对象属性,不会尝试访问目标路径(哪怕是离线的网络共享),所以不会有卡顿或延迟。
  • 准确区分虚拟/真实文件夹:完美排除了zip、rar这类被Shell模拟为文件夹的归档文件,同时保留所有真实的本地和网络文件夹快捷方式。

内容的提问来源于stack exchange,提问作者Dilyan Traykov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:32:44