无法在局域网创建目录:路径拼接异常及PathTooLongException问题
问题解决步骤
一、先修复路径拼接失败的问题
你的代码里fullPath没有正确拼接出P00125,核心原因是路径字符串的转义错误:
- 检查
GetServerDirectory返回的serverPath格式:你预期的共享路径\\192.168.100.9\98 PatientsScan写法错误,在C#中反斜杠必须转义为\\,或者用@前缀声明原始字符串。正确的写法应该是@"\\192.168.100.9\98 PatientsScan"或者"\\\\192.168.100.9\\98 PatientsScan"。如果serverPath里的\98未正确转义,会被解析为无效的八进制转义字符,导致Path.Combine无法识别路径结构,自然拼不上后续的P00125。 - 验证
serverPath实际值:在代码中添加Console.WriteLine(serverPath);,打印返回值确认是否为预期的完整共享路径,有没有被截断或转义错误。
二、解决PathTooLongException异常
如果路径确实超过Windows传统的260字符限制,可通过以下方法处理:
- 使用
\\?\长路径前缀:
这个前缀可以绕过Windows传统路径长度限制,注意UNC共享路径需要特殊处理:string serverPath = GetServerDirectory(serverDirectory); // 确保serverPath是正确转义的路径,比如@"\\192.168.100.9\98 PatientsScan" string fullPath = Path.Combine(serverPath, "P00125"); // 转换为长路径格式 if (fullPath.StartsWith(@"\\", StringComparison.Ordinal)) { // UNC路径转换为\\?\UNC\服务器\共享名格式 fullPath = @"\\?\UNC\" + fullPath.Substring(2); } else { // 本地路径直接加\\?\前缀 fullPath = @"\\?\" + fullPath; } if (!Directory.Exists(fullPath)) Directory.CreateDirectory(fullPath); - 启用系统长路径支持:
打开注册表编辑器,找到HKLM\SYSTEM\CurrentControlSet\Control\FileSystem,新建DWORD值LongPathsEnabled并设置为1,重启系统后,.NET Framework 4.6.2+或.NET Core/.NET 5+的应用可直接支持长路径,无需额外前缀。 - 升级到.NET Core/.NET 5+:
这些版本默认支持长路径(配合系统注册表设置或应用配置EnableLongPaths),无需手动处理前缀。
内容的提问来源于stack exchange,提问作者Ramez Ayad
相关产品推荐
相关产品推荐

