首页 > 编程语言 >C# File.Exist 返回false 无法正确判断文件是否存在

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

时间:2023-03-11 20:34:22浏览次数:42  
标签:文件 false Unicode C# 路径 Exist File 字符串

问题描述:

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

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

 

复现方式:

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

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

 

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

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 方法无法正确访问文件,因此在处理文件路径时需要注意。

标签:文件,false,Unicode,C#,路径,Exist,File,字符串
From: https://www.cnblogs.com/dongzhaosheng/p/17206871.html

相关文章

  • 路飞项目,celery异步任务框架,介绍和安装,快速使用,包结构
    celery介绍和安装celery是什么翻译过来就是芹菜的意思,跟芹菜没有关系框架:服务,python的框架,跟django无关能用来做什么异步任务定时任务延迟任务理解celery的运行......
  • (linux)CentOS -yum 安装jdk1.8
    1、搜索jdk安装:yumsearchjava|grepjdk12、安装jdk1.8:yuminstalljava-1.8.0-openjdk查看是否安装成功:java-version3、环境变量配置:JDK`默认安装路径`/usr/lib/jvm......
  • Weisfeiler-Lehman Neural Machine for Link Prediction
    目录概符号说明Weisfeiler-Lehmanalgorithm1-WLHash-WLPalette-WL本文的方法代码ZhangM.andChenY.Weisfeiler-Lehmanneuralmachineforlinkprediction.InACM......
  • MybatisPlus(六) IService层CRUD相关接口使用
    Save(添加)//插入一条记录(选择字段,策略插入)booleansave(Tentity);//插入(批量)booleansaveBatch(Collection<T>entityList);//插入(批量)booleansaveBatch(Collec......
  • 我的电脑的cpu、cpu核数
    1、查看电脑的cpu型号、内存大小2、查看cpu使用情况3、4个内核8个逻辑处理器因为处理器使用了超线程技术,所以每个核心是两个线程,所以4个物理核心就是8个线程,也......
  • ChatGPT:编码
    人的大脑结构对比计算机结构有哪些优劣势?人的大脑和计算机的结构存在一些显著的优劣势。优势:并行处理能力:人的大脑可以同时处理多个信息,即具有高度的并行处......
  • Apple Catching POJ - 2385
     有个人在2柯树之间来回,在1~T的时刻i时,其中一颗棵树会掉一个果子,规定只能掉头m次,问最多能获得多少果子  f[i][j]#include<iostream>#include<algorithm>......
  • ifc4x3 IfcActuatorType
    ifc4x3 IfcActuatorType1语义定义分配控制元件类型IfcActuatorType定义了致动器出现的共同共享信息。共享信息集可以包括:具有共享属性集的公共财产共同表示法普通......
  • 基于Pierre Dellacherie-俄罗斯方块
    基于PierreDellacherie的俄罗斯方块1.基于ui和数据分离的想法这里先介绍ui,后期数据尽量不与ui有关系,这个的话可以使俄罗斯方块具有比较好的移植性2.这里使用的是Win32来......
  • Docker安装Nginx入门示例
    测试环境:Ubuntu20.04Dockerversion23.0.1Nginx容器版本:1.23.31.拉取镜像拉取命令:dockerpullnginx:1.23.3查看镜像:yyj@yyj:~$dockerimagesREPOSITORYTA......