違いの.NET Frameworkおよび.NETのコアファイルシステム

ネットFxのでは、のtry / catchによって決定することができ、ユーザによってDirectoryInfo / FileInfoにパス入力が正当なものであるが、私は完全に別の営業成績が見つかっ、コードKaodaoネットコアを実行したインスタンス化

VAR DI = 新新 DirectoryInfo(@ " @#¥%35 |¥%/¥は^ [<(国)>] ......%、/ - \ = +&* ......#@!"); // .NET FrameworkのスローArgumentExceptionが例外下:パスは、不正な文字があります。
di.Create();   //はネットコアの下にIOExceptionがスローされます。ファイル名、ディレクトリ名、またはボリュームラベルの構文が正しくありません。

パスは、故障のDirectoryInfoのインスタンスを不正な文字を持っているので、上記のコードは、.NET Fxの4.6.1 System.ArgumentExceptionの例外で最初の文をスローします

ネットコア2.2で、.NETのコアは、クロスプラットフォームであるためか、異なるオペレーティングシステムの判定に統一されたパスを行うことは単に、あまりにも面倒である第2文のSystem.IO.IOExceptionは、例外がスローされます、最初の文ではエラーではありません(落書きができる)ではない解析、またメソッドを作成し決定すること、およびシステムIOに直接例外復帰

 

このような観点を証明するために

ビュー純為替のソースは(も逆コンパイルすることができます)、そのような不正な文字とパスの長さとして、検査にコンストラクタDirectoryInfo内のパスの多くを見つけ
https://referencesource.microsoft.com/#mscorlib/system/io/directoryinfo.cs 、30fa608717e5ce8e

构造方法内部调用顺序:DirectoryInfo(文字列パス) - >初期化(文字列パス、BOOL checkHost) - > Directory.GetFullPathAndCheckPermissions(パス、checkHost) - > Path.GetFullPathInternal(パス) - > NormalizePath(パス、fullCheck:真) - > Path.NormalizePath(文字列のパス、fullCheck BOOL、INT maxPathLength) - > Path.NormalizePath(パス、fullCheck、maxPathLength、expandShortPaths:真) - > Path.LegacyNormalizePath(パス、fullCheck、maxPathLength、expandShortPaths)

 

それはパスが空であるかどうかを決定することに加えて発見された、ソースネットコア次のページを参照していない、他の検査

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

おすすめ

転載: www.cnblogs.com/felixnet/p/12038758.html