Dotnet Core控制台程序绝对路径文件夹存在性判断失败求助
解决.NET Core控制台应用中路径存在但
Directory.Exists返回false的问题 我之前也踩过完全一样的坑!你遇到的问题大概率是路径字符串里混入了不可见的特殊控制字符——比如从文档、网页复制路径时带的「左到右标记(LTR)」或者零宽空格,这些字符肉眼根本看不到,但会让.NET的路径解析逻辑完全跑偏,把绝对路径当成无效的相对路径处理,自然就返回false了。
给你几个靠谱的解决办法:
手动重新输入路径,拒绝复制粘贴
把你当前的路径代码改成手动敲写的版本,尽量用Windows标准的反斜杠分隔符(虽然正斜杠也能识别,但反斜杠更符合Windows系统习惯):string Folder = @"C:\Users\Admin\Desktop\local-folder";手动输入能彻底避免引入隐藏的控制字符。
用代码清理路径中的特殊字符
如果必须使用复制的路径,可以加一段代码过滤掉所有非打印的控制字符:string rawFolder = @"C:/Users/Admin/Desktop/local-folder"; // 过滤掉所有ASCII控制字符,只保留可打印的字符 string cleanFolder = new string(rawFolder.Where(c => !char.IsControl(c)).ToArray()); DirectoryInfo d = new DirectoryInfo(cleanFolder); bool isExist = Directory.Exists(cleanFolder); bool isExist2 = d.Exists;验证路径是否有隐藏字符
可以先把路径的长度和字符编码打印出来,确认是否存在异常:Console.WriteLine($"路径长度:{Folder.Length}"); Console.WriteLine($"原始路径字符编码详情:"); foreach (char c in Folder) { Console.WriteLine($"'{c}' => Unicode编码:{(int)c}"); }如果看到编码是8206(左到右标记)之类的非可打印字符,就坐实了问题根源。
另外补充一点:虽然权限问题也可能导致Exists返回false,但根据你描述的“路径被当作相对路径”的现象,这个概率极低,优先排查路径本身的问题就好。
内容的提问来源于stack exchange,提问作者Lamloumi Afif
相关产品推荐
相关产品推荐

