C#调用Directory.EnumerateFiles访问共享根路径报路径无效错误
错误原因
这个报错的核心原因是你传入的路径不符合Windows UNC目录的格式要求:
合法的UNC文件路径结构为\\<服务器地址>\<共享名>\[子目录],你传入的\\fileshareserver.abc.net只到服务器层级,没有指定具体的共享名称。这个层级不属于文件系统的可枚举目录:你在资源管理器输入这个地址时,看到的是服务器开放的所有共享列表,这是SMB协议层面的枚举结果,不是普通的文件目录节点。Directory.EnumerateFiles是面向标准文件系统目录实现的方法,只能识别具体共享及其下的子目录路径,无法解析仅到服务器级别的路径,自然会抛出路径无效错误。另外你贴的报错信息里路径是\\fileshareserver.abc.com,和你描述的abc.net域名不一致,建议先排查下是否存在代码笔误。
修复方案
- 如果你要枚举目标共享根下的文件,直接在服务器地址后补全对应的共享名即可。比如你的文件存放在名为
PublicShare的共享下,正确的根路径是\\fileshareserver.abc.net\PublicShare,把这个路径传入方法就能正常枚举,和你访问子目录时的逻辑完全一致。 - 如果你需要先列出这台服务器上所有可用的共享,不能用
Directory类的方法,可通过WMI查询Win32_Share类、或者调用Windows原生NetShareEnum接口获取共享列表,拿到合法的共享路径后再做文件遍历。
内容的提问来源于stack exchange,提问作者Kartikeya Gokhale
相关产品推荐
相关产品推荐

