如何使用C#获取网络文件夹目录列表并解决网络路径未找到报错
排查及解决方案
UAC上下文凭据隔离
普通用户登录后在资源管理器访问UNC路径时缓存的身份凭据,和管理员身份运行的Visual Studio的运行上下文相互独立,管理员账号上下文默认没有该路径的访问凭据。
解决方法:先以管理员身份打开文件资源管理器,访问一次\\10.188.169.139\builds\product A完成身份验证,再运行代码测试。
路径校验
确认代码中路径无隐形特殊字符:比如路径中的空格为半角格式,无不可见的制表符、换行符。建议直接从资源管理器地址栏复制路径替换代码中的路径字符串,避免手动输入错误。
预建立UNC连接
如果上述方法无效,可以在调用目录查询方法前,通过Windows API预先完成UNC路径的身份认证,示例代码如下:
using System.Runtime.InteropServices; public static class NetworkConnector { [DllImport("mpr.dll", CharSet = CharSet.Auto)] private static extern int WNetAddConnection2(NetResource netResource, string password, string userName, int flags); [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] private class NetResource { public int Scope = 0; public int Type = 1; // 磁盘资源 public int DisplayType = 0; public int Usage = 0; public string LocalName = null; public string RemoteName = null; public string Comment = null; public string Provider = null; } /// <param name="remoteUNCPath">UNC路径,比如\\10.188.169.139\builds</param> /// <param name="userName">账号,本地账号格式为IP\用户名,域账号格式为域名\用户名</param> /// <param name="password">账号对应密码</param> public static int ConnectUNC(string remoteUNCPath, string userName, string password) { var resource = new NetResource { RemoteName = remoteUNCPath }; return WNetAddConnection2(resource, password, userName, 0); } }
调用示例:
// 先完成身份认证 NetworkConnector.ConnectUNC(@"\\10.188.169.139\builds", @"10.188.169.139\你的访问账号", "账号密码"); // 再查询目录 var directories = Directory.GetDirectories(@"\\10.188.169.139\builds\product A");
项目生成配置校验
右键项目 -> 选择「属性」-> 切换到「生成」标签页,确认「平台目标」选项下没有勾选「优先32位」,32位程序的网络访问上下文和64位系统的资源管理器存在差异,可能导致路径识别失败。
内容的提问来源于stack exchange,提问作者Ben_G
相关产品推荐
相关产品推荐

