.NET 2与.NET 4.8中FileInfo行为差异及兼容配置咨询
.NET 2迁移至.NET 4.8的路径API行为问题解答
一、FileInfo.FullName行为差异的配置解决方案
从.NET 4.0开始,路径处理逻辑发生变更:默认保留路径组件(如文件夹、文件名)中的末尾空格,而.NET 2会自动截断这些空格。要让.NET 4.8与.NET 2表现一致,可通过配置文件启用遗留路径处理模式:
在app.config或web.config的<runtime>节点下添加以下配置:
<configuration> <runtime> <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=true" /> </runtime> </configuration>
启用该开关后,.NET会采用.NET 2-3.5的路径处理逻辑,new FileInfo("C:\\a \\b").FullName将返回"C:\\a\\b",与.NET 2行为一致。
二、Directory.CreateDirectory忽略末尾空格的行为说明
这个行为并非.NET版本差异导致,而是Windows文件系统的固有规则:Windows不允许文件夹或文件名以空格(或句点)结尾,当调用Directory.CreateDirectory传入带末尾空格的路径时,底层会自动截断这些末尾空格,实际创建的目录名称不包含空格。
相关文档参考内容:
- .NET官方文档对
Directory.CreateDirectory的说明:方法会对输入路径进行规范化处理,其中包括移除路径末尾的空格、句点等Windows文件系统不允许的字符。 - Windows文件系统命名规则:文件名/文件夹名不能以空格或句点结尾,系统在处理这类名称时会自动截断末尾的无效字符。
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

