在.Net Fx下,可通过try/catch实例化DirectoryInfo/FileInfo来判断用户输入的路径是否合法,但我把代码拷到 .Net Core 下运行,发现运行结果完全不同

var di = new DirectoryInfo(@"!@#¥%35|¥%/¥^[<(国)>]……%、/-\=+&*……#@"); //.Net Framework 下抛出 ArgumentException 异常:路径中具有非法字符。
di.Create(); //.Net Core 下抛出 IOException 异常:文件名、目录名或卷标语法不正确。

以上代码在 .Net Fx 4.6.1 第一句就会抛出 System.ArgumentException 异常,因为路径中具有非法字符,DirectoryInfo 实例化失败

而在 .Net Core 2.2 中第一句不会报错,第二句会抛出 System.IO.IOException 异常,这大概是因为 .Net Core 是跨平台,针对不同操作系统做统一路径判断比较麻烦,干脆就不判断(乱写都可以),在 Create 方法中也没有进行判断,而直接将系统IO异常返回

为了印证以上观点

查看.Net Fx源码(也可以反编译),发现 DirectoryInfo 构造方法内部对路径进行了大量检查,比如非法字符和路径长度
https://referencesource.microsoft.com/#mscorlib/system/io/directoryinfo.cs,30fa608717e5ce8e

构造方法内部调用顺序:DirectoryInfo(string path) -> Init(string path, bool checkHost) -> Directory.GetFullPathAndCheckPermissions(path, checkHost) -> Path.GetFullPathInternal(path) -> NormalizePath(path, fullCheck: true) -> Path.NormalizePath(string path, bool fullCheck, int maxPathLength) -> Path.NormalizePath(path, fullCheck, maxPathLength, expandShortPaths: true) -> Path.LegacyNormalizePath(path, fullCheck, maxPathLength, expandShortPaths)

接着查看 .Net Core 源码,发现除了判断路径是否为空,没有任何其它检查

https://github.com/dotnet/corefx/blob/215f374988eba0829f6880026909851ed04a8638/src/System.IO.FileSystem/src/System/IO/DirectoryInfo.cs

而 Create 方法也只是一句,调用底层文件系统创建目录

public void Create() => FileSystem.CreateDirectory(FullPath);

总结

.Net Core和.Net Fx是兼容关系,而不是继承关系,即使同样的类库,运行结果也有差异

或许 .Net Core 将来的版本会加上路径检查的功能,比如给 Path 添加一个 IsPathNormalized(string path) 静态方法,给 FileInfo/DirectoryInfo 添加一个 IsValid() 实例方法

最新文章

  1. PowerShell中的基础数据类型
  2. MySql中文乱码
  3. Hadoop之Storm安装
  4. 管理不同版本ruby和rails的利器——rvm
  5. [转载]两个半小时学会Perl
  6. 解决android调用IIS Express中的WCF服务时,出现错误400问题
  7. Dollars
  8. Semantic UI中的验证控件的事件的使用
  9. centos redis 安装
  10. HDU 5240 Exam
  11. c3p0数据库连接池+mysql数据库基本使用方法
  12. iOS 开发之 Xcode installation failed invalid argument!
  13. Codeforces Round #505 (Div 1 + Div 2 Combined) Solution
  14. cocos2d-x JS 随机数
  15. 【Java】Java批量文件打包下载zip
  16. php提交表单校验例子
  17. flask-mysqldb安装时EnvironmentError: mysql_config not found
  18. EF 通过DataAnnotations配置属性和类型
  19. input、textArea实时显示剩余可输入的字数
  20. solr学习(一)

热门文章

  1. CF1253E Antenna Coverage(DP)
  2. C#开发BIMFACE系列29 服务端API之获取模型数据14:获取图纸列表
  3. umi+dva+antd新建项目(亲测可用)
  4. spring cloud 2.x版本 Spring Cloud Stream消息驱动组件基础教程(kafaka篇)
  5. Nginx 极简教程(快速入门)
  6. 《DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks》研读笔记
  7. 简单解决 VMWare “无法打开内核设备:\\Global\\vmx86”错误
  8. 用Python制作只属于你和ta的聊天渠道吧
  9. 用 Python 监控知乎和微博的热门话题
  10. Dynamics CRM中的注释(Note)及RollupRequest消息初探