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(), если переключатели установлены, и они есть. Так что я не знаю, как заставить меня работать.

Кто-нибудь может объяснить, что я делаю не так? Спасибо за любые отзывы!

- Джаз

1 ответ

Ваше имя файла имеет длину 317 символов, что превышает 255 символов, разрешенных в сегменте пути NTFS ( # 1, # 2).

(Оглядываясь назад, Джереми, вероятно, допустил ошибку, использовав пример, который не мог работать ни на одной файловой системе в #2!)

Другие вопросы по тегам