C# File.Exist 返回false 无法正确判断文件是否存在

问题描述:

首先澄清一下File.Exist 并没有问题,为了让更多没有思路的朋友进来看明白什么原因导致这个问题的,我才会起这么一个标题现在我给大家讲一下为何会发生这个问题。

在 Windows 系统中,当文件属性中包含不可视的 Unicode 字符串时,C# File.Exist 方法无法正确识别文件是否存在,这是因为 File.Exist 方法在判断文件是否存在时是通过访问文件的属性来实现的,而如果文件属性中包含不可视的 Unicode 字符串,则会导致 File.Exist 方法无法正确访问文件。

 

复现方式:

1、文件属性-安全-对象名称 鼠标从前往后复制出来的字符串 和从后往前复制出来的字符串使用md5进行比对即可发现md5值不同。

2、将可以被File.Exist判断存在的文件路径和不能判断存在的文件路径复制到txt文本中,这两个路径肉眼看应该是一致的,然后在文本中将编码调整成ASCII编码你会发现有问题的路径前面会有一个不可识别的unicode字符串它就是罪魁祸首。

 

解决方法: 可以使用正则表达式过滤掉文件路径中的不可视 Unicode 字符串,以解决该问题。下面是使用 C# 代码实现的方法:

1
2
3
4
5
6
7
8
9
10
using System.IO;
using System.Text.RegularExpressions;
 
public static bool IsFileExist(string filePath)
{
    // 使用正则表达式过滤掉文件路径中的不可视 Unicode 字符串
    var filteredPath = Regex.Replace(filePath, @"[\p{C}]", "");
 
    return File.Exists(filteredPath);
}

  

上面的代码中,使用了正则表达式 [\p{C}]

 来匹配不可视的 Unicode 字符串,然后使用 Regex.Replace 方法将其过滤掉,得到过滤后的文件路径 filteredPath。最后,使用 File.Exists 方法判断文件是否存在。

注意事项: 虽然使用正则表达式过滤掉不可视 Unicode 字符串可以解决该问题,但同时也可能导致一些不可预见的问题,因此在实际应用中需要谨慎使用。此外,如果文件路径中包含其他非法字符,也可能会导致 File.Exist 方法无法正确访问文件,因此在处理文件路径时需要注意。

posted @   dongzhaosheng73  阅读(1254)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示