【长路经】C#读取文件抛出FileNotFoundException异常

news/2025/1/4 8:51:54/文章来源:https://www.cnblogs.com/masonblog/p/18645457

前言

在winform中读取文件信息时,突然抛出了FileNotFoundException的异常,但是本地是有这个文件的。

随后找到了这个文件,查看属性,[位置]属性,多了"\\?\"的前缀,百度得知这是windows对长路经的处理。

需要注意:

目前在NetFx框架下,才有这个问题。

在NetCore框架下,是正常运行。

复现问题的代码

代码如下

        static void Test02(){List<string> dirList = new List<string>(){"F:\\100-cnblogs_blog","01-all-备份备份备份备份备份备份备份","02-html-备份备份备份备份备份备份备份","03-bak-备份备份备份备份备份备份备份","04-file-备份备份备份备份备份备份备份",};string basePath = Path.Combine(dirList.ToArray());if (Directory.Exists(basePath) == false)Directory.CreateDirectory(basePath);//假设有这2个文件//这个文件是正常=>1.txt//这个文件会报错=>6bRLpUwRTXshio75MZtzxmqjtfRlIMXDKFPdAG1f63gdXvxoY5pPPUaermZuHsUfrLI90xSYW8qiYzucUV4GceuHqvpFVaojMkFS5g9mmE5QL5K2YEOkLWFuF2Oboi1JsbCEhMoD77SGczO7GgZX60XPQZuo7hZFP3LKqJ4EHYKL8yjdVAYAwpm737JikdH3OUQ9zOhh.txtvar files = Directory.GetFiles(basePath, "*.*", SearchOption.AllDirectories);foreach (var item in files){string fullName = item;FileInfo fileInfo = new FileInfo(fullName);Console.WriteLine(fileInfo.Name);string pre = "    =>";bool retry = false;try{Console.WriteLine(pre + "Length:" + fileInfo.Length);Console.WriteLine(pre + "未报错,正常获取");}catch (FileNotFoundException){fullName = @"\\?\" + fullName;retry = true;Console.WriteLine(pre + "文件不存在,添加长路经前缀后重试");}if (retry){fileInfo = new FileInfo(fullName);try{Console.WriteLine(pre + "Length:" + fileInfo.Length);Console.WriteLine(pre + "重试后,正常获取");}catch (Exception ex){Console.WriteLine(pre + "重试仍然报错");Console.WriteLine(ex.Message);}}}}

运行结果

解决办法

先是考虑了捕获异常再重试的思路,但是在可预知的情况不应该使用trycatch方式处理问题。

所以采用了判断文件是否存在的方式

代码如下

        static void Test03(){List<string> dirList = new List<string>(){"F:\\100-cnblogs_blog","01-all-备份备份备份备份备份备份备份","02-html-备份备份备份备份备份备份备份","03-bak-备份备份备份备份备份备份备份","04-file-备份备份备份备份备份备份备份",};string basePath = Path.Combine(dirList.ToArray());if (Directory.Exists(basePath) == false)Directory.CreateDirectory(basePath);var files = Directory.GetFiles(basePath, "*.*", SearchOption.AllDirectories);foreach (var item in files){string fullName = item;if (File.Exists(fullName) == false)fullName = @"\\?\" + fullName;FileInfo fileInfo = new FileInfo(fullName);Console.WriteLine(fileInfo.Name);string pre = "    =>";Console.WriteLine(pre + "Length:" + fileInfo.Length);}}

运行结果

 

 


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/862246.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【unity】学习制作类银河恶魔城游戏-5-

在-1---4-中,了解了unity的基础操作,从创建一个人物开始,通过状态机和代码完善人物的各种功能达到预期效果,随着功能的越来越多,状态机的处理也就越发麻烦,因此,从零开始设计一个合理的状态机很有必要 梦开始的地方 创建一个新的项目修改舒服的布局创建状态机,通过脚本…

CH340C 请求 USB 设备描述符失败

简短不看版如果出现上述状况,说明线有问题:线的确是数据线(不是电源线),但是不是能与CH340正常通讯的数据线(数据线的数据传输功能有问题。 需要更换其它数据线.前文该文分享CH340驱动使用过程可能出现的问题,以下出现的问题解决方案都建立在CH340硬件正常的情况下。CH3…

CH32V203F6P6-TSSOP20测试之02

一、问题思考 直接用官方提供的例程,为何下载程序后没有什么响应,难道自己设计的电路有什么不妥? 于是,对于电路进行具体分析,结果发现: 第一、官方的BOOT0采用杜邦线连接,在芯片手册好像找不到关于BOOT0的叙述,仅仅在《CH32V20x评估板说明书》中看到:也就是说,这芯片…

PVC

短线反弹

大语言模型提示技巧(一)-指令要清晰、具体

在与大语言模型对话时,应该提供尽可能清晰和具体的指令来表达希望模型执行的操作,这将有助于模型给出接近你所期待的输出,并降低得到无关或不正确回复的可能性。但需要注意的是,编写清晰的指令不意味着编写简短的指令,事实上,更长的提示实际上更清晰且提供了更多的上下文…

再见2024,一个算法研发的个人年终总结

元旦将近,显然又是一年岁末。 同事开始讨论中午吃什么,以及晚上的跨年计划之类的大问题。 我开始努力回想自己的2024,秉承着毕业以来每年写个人总结的习惯, 也因为近年来自己的节奏和生活越来越快,只能在年终的节点停下来回顾下自己的历程。 前言 我打开了自己的相册,下面…

; 自动设置电脑快捷键的AutoHotkey脚本程序源代码 2025年1月1日

; 自动设置电脑快捷键的AutoHotkey脚本程序源代码 2025年1月1日 ; 自动设置电脑快捷键的AutoHotkey脚本程序源代码 2025年1月1日;======== 设置显示或者隐藏MasterSeeker和Total Commander主窗口的快捷键的AutoHotkey脚本2024.10.21 ========= ; 此脚本从此行开始 ; D:\app\Re…

记 Redisson 报错 attempt to unlock lock, not locked by current thread

原文:记一次 Redisson 线上问题 → 你怎么能释放别人的锁错误信息: attempt to unlock lock, not locked by current thread by node id: b9df1975-5595-42eb-beae-bdc5d67bce49 thread-id: 52查看日志,找到对应的堆栈信息 Exception in thread "thread0" java.la…

您的公司需要小型语言模型

当专用模型超越通用模型时 “越大越好”——这个原则在人工智能领域根深蒂固。每个月都有更大的模型诞生,参数越来越多。各家公司甚至为此建设价值100亿美元的AI数据中心。但这是唯一的方向吗? 在NeurIPS 2024大会上,OpenAI联合创始人伊利亚苏茨克弗提出了一个观点:“我们所…

2024年12月总结及随笔之1T资料灭失

2024年12月总结及随笔之1T资料灭失1. 回头看 日更坚持了731天。读《数据质量管理:数据可靠性与数据质量问题解决之道》更新完成 读《图数据库实战》更新完成 读《数据保护:工作负载的可恢复性》开更并持续更新2023年至2024年12月底累计码字1834939字,累计日均码字2510字。 2…

JDK 23 新特性解析

1. 前言 JDK 23 是 Java SE 平台版本 23 的参考实现,2024 年 9 月 17 日正式发布。本文将详细解析 JDK 23 的主要新特性。 2. 新特性总览JEP 特性名称 状态 说明455 模式中的原始类型、instanceof 和 switch 预览 扩展模式匹配,允许在所有模式上下文中使用原始类型,并在 ins…

关于 Pycharm 2024 安装激活使用教程以及常见问题(激活至2026,实际上永久,亲测!)

申明:本教程 Pycharm补丁、激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除。若条件允许,希望大家购买正版 !卸载老版本 Pycharm 首先,如果小伙伴的电脑上有安装老版本的 Pycharm , 需要将其彻底卸载掉,如下所示(没有安装则不用管,直接安装即…