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

C#中Directory.GetFiles未返回文件名的原因排查(网络共享场景)

C#遍历网络共享文件夹无法获取文件的原因分析

以下是几种可能导致问题的原因:

1. 调试进程的权限上下文不匹配

VS调试时的进程可能没有使用你当前登录的域账户权限:

  • 如果你右键以管理员身份运行VS,而管理员是本地账户而非域账户,此时进程会以本地管理员身份访问共享文件夹,权限不足导致能看到文件夹但无法读取文件。
  • 确认VS的启动账户:确保VS是用你拥有共享文件夹访问权限的域账户启动的,而非其他本地账户。

2. 文件筛选器或路径问题

  • 扩展名大小写不匹配:第一段代码使用*.pdf作为筛选器,若文件扩展名是大写.PDF,部分网络文件系统下的搜索会区分大小写,导致匹配失败。可以改用不区分大小写的筛选方式,比如*.[Pp][Dd][Ff],或者通过FileInfo判断扩展名:
    foreach (string sfile in Directory.GetFiles(@"\\\\fileshare\\apptest$\\docs\\Processing\\", "*", SearchOption.AllDirectories))
    {
        if (Path.GetExtension(sfile).Equals(".pdf", StringComparison.OrdinalIgnoreCase))
        {
            Console.WriteLine(sfile);
        }
    }
    
  • 路径末尾斜杠冗余:尝试去掉路径末尾的斜杠,改为@"\\\\fileshare\\apptest$\\docs\\Processing",避免路径解析异常。

3. 文件属性为隐藏/系统文件

Directory.GetFiles默认不会返回标记为隐藏或系统属性的文件。如果你的PDF文件被设置了这类属性,需要显式筛选:

foreach (string sourcedirectory in Directory.EnumerateDirectories(@"\\\\fileshare\\apptest$\\docs\\Processing\\"))
{
    Console.WriteLine(sourcedirectory);
    foreach (string file in Directory.EnumerateFiles(sourcedirectory))
    {
        var fileAttr = new FileInfo(file).Attributes;
        if ((fileAttr & (FileAttributes.Hidden | FileAttributes.System)) == 0)
        {
            Console.WriteLine(file);
        }
    }
}

4. 网络共享的权限配置问题

即使你能在资源管理器看到文件,共享权限和NTFS权限可能存在差异:

  • NTFS权限继承问题:子文件夹的文件可能没有继承父文件夹的权限,导致你有文件夹访问权但无文件读取权。
  • 访问枚举设置禁用:共享文件夹的高级设置中,若“访问枚举”被禁用,用户只能看到自己有权限的文件夹,但无法看到文件(即使文件有权限)。可在共享文件夹的「高级共享」→「权限」→「高级」中检查该设置。

5. 未捕获的异常中断文件遍历

遍历过程中若遇到无权限访问的子文件夹,Directory.GetFiles会抛出UnauthorizedAccessException,若未捕获异常,会导致后续遍历直接终止。添加异常捕获排查:

foreach (string sourcedirectory in Directory.EnumerateDirectories(@"\\\\fileshare\\apptest$\\docs\\Processing\\"))
{
    Console.WriteLine(sourcedirectory);
    try
    {
        foreach (string file in Directory.GetFiles(sourcedirectory))
        {
            Console.WriteLine(file); 
        }
    }
    catch (UnauthorizedAccessException ex)
    {
        Console.WriteLine($"无法访问文件夹{sourcedirectory}的文件:{ex.Message}");
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:04:53