经验分享 · 2023年3月21日

C# File.Exists 文件”存在”,却一直返回False的奇葩一例

.Net 6.0做后台图片下载,使用File.Exists确认文件是否存在,结果一直返回false,下面将我的排查过程记录下来,有类似情况的可以参考:

1、首先我怀疑自己的路径错了,在调试状态下,我把路径变量值复制下来,在文件浏览器地址栏里粘贴,然后回车,图片成功打开,首先排除了路径问题,也为后来的曲折埋下了伏笔;

2、第二个考虑的是文件权限问题,先把Visual Studio用管理员身份运行,无效;把文件所在文件夹设置为Everyone完全控制,无效;

3、折腾了一个多小时后,开始剑走偏锋,有老外说要在前面加\\?\,比如 \\?\c:\\myfile.txt ,仍然无效;

4、有网友说不能访问IIS运行目录以外的文件夹,想了一下就排除了,因为这些图片就是我自己的程序上传上来的;

5、MSDN上说路径长度超过255个字符,或者路径中包含特殊字符,可能出现此问题,我的全路径只有几十个字符,且文件名确认没有特殊字符,排除;

6、万般无奈之际,再次重复第一个步骤,打开图片仔细端详,难道我这图片“有毒”??无意间一眼瞥见图片预览的标题栏,文件名后面竟然两个jpg,也就是 abc.jpg.jpg,原来文件真的不存在,上传文件的时候多拼接了一个.jpg!可坑爹的是windows太智能了,我在地址栏里输入的路径明明少一个.jpg,它仍然打开了!这也算是好心办坏事吧。