C #: длинный путь с UseLegacyPathHandling и BlockLongPaths не работает - PullRequest
0 голосов
/ 10 января 2019

Я использую 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 Ответ

0 голосов
/ 10 января 2019

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

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

...