C#: длинный путь с UseLegacyPathHandling и BlockLongPaths не работает
Я использую 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(), если переключатели установлены, и они есть. Так что я не знаю, как заставить меня работать.
Кто-нибудь может объяснить, что я делаю не так? Спасибо за любые отзывы!
- Джаз