在.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() 实例方法

.Net Framework与.Net Core文件系统的差异的更多相关文章

  1. NET?.NET Framework?.NET Core?

    什么是.NET?什么是.NET Framework?什么是.NET Core? https://www.cnblogs.com/1996V/p/9037603.html 什么是.NET?什么是.NET ...

  2. 基于SqlSugar的数据库访问处理的封装,支持.net FrameWork和.net core的项目调用

    由于我们有时候需要在基于.net framework的项目上使用(如Winform端应用),有时候有需要在.net core的项目上使用(如.net core的WebAPI),那么我们把基于SQLSu ...

  3. .NET Framework和 .Net Core实现不一致的API之 `EmailAddressAttribute`

    .NET Framework和 .Net Core实现不一致的API之 EmailAddressAttribute Intro 现在我们的类库项目大多是 NETStandard2.0 项目,但是 ne ...

  4. .NET Framework VS .NET Core

    本文对应的原文来至 c-sharpcorner 的一篇文章,文末有链接.如有错误,还请指正. 前言 你会为你的下一个应用程序选择哪一种开发平台 - .NET Framework 或者 .NET Cor ...

  5. ASP.NET Core 文件系统

    ASP.NET Core 文件系统 静态文件 目录浏览 默认页面 MIME类型配置 实战文件服务器  紧接上一讲 中间件 之后,今天来我们来讲一下关于 ASP.NET  Core 中静态文件服务. 什 ...

  6. 开源且功能强大的C# 扩展方法类库Pure.Ext,包含1000+个拓展方法 (支持.Net Framework和.Net Core)

    先上地址 Github: https://github.com/purestackorg/pure.ext Gitee: https://gitee.com/purestack/pure.ext 扩展 ...

  7. .net core系列之《.net平台历程介绍以及.net framework和.net core对比》

    一..Net平台的背景 1.2010之前 的PC时代的时候,互联网规模还不是特别庞大,以静态编译式语言为代表的JAVA和.Net没什么太大区别,.net以windows自居. 2.2010年以JAVA ...

  8. [转]浅谈 .NET Framework 与 .NET Core 的区别与联系

    本文转自:http://www.cnblogs.com/huchaoheng/p/6295688.html 2017到了,咱们学点啥啊,要想知道学点啥,先弄清.NET Framework 与 .NET ...

  9. 浅谈 .NET Framework 与 .NET Core 的区别与联系

    2017到了,咱们学点啥啊,要想知道学点啥,先弄清.NET Framework 与 .NET Core  这两个概念 .当今 net 生态系统如下: 从上面图中我们可以看到.net  主要分为三个部分 ...

随机推荐

  1. numpy中多维数组的绝对索引

    这涉及到吧多维数组映射为一维数组. 对于3维数组,有公式: def MAP(x,y,z): return y_s * z_s * x + z_s * y + z 此公式可以推广到N维 测试代码:(两个 ...

  2. IT兄弟连 Java语法教程 关系运算符

    关系运算符用来判定一个操作数与另外一个操作数之间的关系.特别是,它们可以判定相等和排序关系.表7中列出了关系运算符. 表7  关系运算符 关系运算符的结果为布尔值.关系运算符最常用与if语句和各种循环 ...

  3. PHP TP框架自定义打印函数P

    效果如下,有个灰色背景,也不一定是灰色可以改 代码: //传递数据以易于阅读的样式格式化后输出function p($data){ // 定义样式 $str='<pre style=" ...

  4. solidity定长数组和动态数组

    固定长度的数组 固定长度数组声明 直接在定义数组的时候声明固定长度数组的值: uint[5] fixedArr = [1,2,3,4,5]; 可通过数组的length属性来获得数组的长度,进而进行遍历 ...

  5. 敏捷软件开发_UML<一>

    敏捷软件开发_UML  所看书籍是:敏捷软件开发_原则.模式与实践_C#版(美)马丁著,这本书写的非常棒,感谢作者.该归纳总结的过程按照我读的顺序写. UML  在建造桥梁,零件,自动化设备之前需要建 ...

  6. Vuex细说

    vuex 1,什么是 vuex? vuex 是一个专门为 vue.js 应用程序 开发的状态管理模式+库 它充当应用程序中所有组件的集中存储(数据状态) ,其规则确保状态只能以可预测的方式进行变更 并 ...

  7. sqlserver 问题来了,视图不会自动更新,如果是用*创建的

    奇葩问题一个 create view时候用的select * 关联了几个表创建的. 后修改select *  的表,结果悲剧了. select * from 视图得到的结果绝对让你想哭.不报错,不提示 ...

  8. 【hexo+github搭建myblog】bash: npm: command not found 问题,疑似解决!关键词:NPM全局安装路径

    情况:打算用hexo+github搭建个人博客 1. hexo搭建,参考博文如下,非常感谢: Hexo+Github博客搭建完全教程 hexo从零开始到搭建完整 问题: 在最基本的安装步骤 (参考链接 ...

  9. css横屏问题的设置

    <link rel="stylesheet" media="all and (orientation:portrait)" href="css/ ...

  10. QML::常用属性

    Item 属性: Item 类型比较特殊,因为它是所有其他可视化类型的基类型. Qt Quick中所有可视化类型都基于 Item. Item 对象本身没有一个可视化的外观,但是它定义了可视化项目中所有 ...