。NET 4.6.2宣布取消了系统中260个字符的最大路径长度限制。IO API。
没有针对。NET Framework 4.6.2或设置AppContext开关会导致现有行为被阻止使用长于MAXPATH的路径。行为是选择加入以保持与现有应用程序的向后兼容性。
(强调矿(。
我以为是在下面。NET 4.7.2,我将不再需要编写故障保护来防止这个MAXPATH问题。
但是,一旦sourceDirectoryName
大于260个字符,此代码就会抛出一个System.IO.DirectoryNotFoundException
。
var sourceDirectoryName = @"C:UsersMYUSER___DocumentsSandboxtempOneDrive_1_11-04-2022MySuperProject_With_Long_Name_Prefixaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.bundle";
var destinationArchiveFileName = @"C:UsersMYUSER___DocumentsSandboxtempOneDrive_1_11-04-2022MySuperProject_With_Long_Name_Prefixaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.bundle.out";
ZipFile.CreateFromDirectory(sourceDirectoryName, destinationArchiveFileName);
为什么我在大路径下仍然有问题。NET 4.7.2?
也许我读错了那句话,
没有针对。NET Framework 4.6.2或设置AppContext开关会导致现有行为被阻止使用长于MAXPATH的路径。行为是选择加入以保持与现有应用程序的向后兼容性。
但在我看来,瞄准目标的简单事实。NET 4.7.2将导致的行为允许路径长于MAXPATH。
然而,我不得不在app.manifest
中手动启用它
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
</application>
该代码不再触发任何异常。