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

.NET Framework删除长文件名文件报错问题求助

.NET Framework删除长文件名UNC路径文件的解决方法

问题核心

你的老旧程序遇到的是Windows传统260字符路径长度限制,加上UNC路径格式转换错误导致的"找不到路径"问题——手动能删是因为资源管理器自动处理了长路径和格式转换,而代码里的路径拼接逻辑有误。

错误原因

你之前的代码拼接方式存在格式混乱:

  • 用Path.Combine(@"\\?\UNC\", directory, file)时,directory本身是//127.0.0.1/shared-path/...格式,拼接后会变成\\?\UNC\//127.0.0.1/shared-path/...,系统无法识别这种混合格式的路径。
  • \\?\前缀仅适用于本地路径,UNC路径必须用\\?\UNC\开头,且路径内的斜杠要统一为反斜杠\。

正确解决方案

方法1:直接转换完整文件路径

如果能拿到完整的文件路径,先将其转换成Windows长路径格式再删除:

string fullFilePath = @"//127.0.0.1/shared-path/path/你的长文件名(含变音符号)";
// 转换为符合要求的长路径格式
string longPath = fullFilePath.Replace(@"//", @"\\?\UNC\")
                             .Replace('/', '\\');
File.Delete(longPath);

方法2:分目录与文件名拼接

如果目录和文件名是分开存储的,先处理目录格式再拼接文件名:

string directory = @"//127.0.0.1/shared-path/path";
string fileName = "你的长文件名(含变音符号)";

// 先转换目录为长路径格式
string uncDirectory = directory.Replace(@"//", @"\\?\UNC\")
                               .Replace('/', '\\');
// 拼接出完整的合法长路径
string fullLongPath = Path.Combine(uncDirectory, fileName);
File.Delete(fullLongPath);

额外注意点

  • 变音符号无需额外处理:.NET Framework默认支持Unicode路径,只要你的路径字符串是正确的Unicode格式(不要用ASCII编码处理路径),就不会出现编码问题。
  • 权限验证:既然程序能创建该文件,删除权限理论上没问题;如果仍报错,可检查共享文件夹的读写权限设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:34:54