我将 C# 与.Net v4.7.2和Win10一起使用,并且我有一些具有长路径 ( >260 ) 的文件要复制。
我知道,有一个解决方案可以在路径前加上 \\?\
此前缀有效,但我不想每次都为任何文件操作添加前缀。自 .Net v4.6.2 以来,AppContext-Switches UseLegacyPathHandling和BlockLongPaths有更好的解决方案。
但是,这是行不通的。
我的app.config看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>
</startup>
<windowsSettings>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false" />
</runtime>
</configuration>
我的C# 代码如下所示:
public static void Main(string[] args)
{
string src = @"c:\Temp\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.txt";
string dst = @"c:\Temp\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-123.txt";
File.Copy(src, dst);
}
我的问题
使用 .Net v4.5 File.Copy() 抛出System.IO.PathTooLongException
使用 .Net v4.7.2 File.Copy() 抛出System.IO.DirectoryNotFoundException
如果设置了开关,我通过 AppContext.TryGetSwitch() 检查了它们。所以我不知道如何让我工作。
谁能解释一下,我做错了什么?感谢您的任何反馈!
——爵士