WPF 解決 PathTooLongException 路徑太長

  • 2019 年 12 月 12 日
  • 筆記

在進行訪問文件的時候,可能會因為文件的路徑太長無法創建訪問文件 本文告訴大家如何支持長路徑的讀寫

先創建簡單的程序,在界面放一個按鈕,在按鈕點擊的事件嘗試寫一個文件名很長的文件

        private void Button_OnClick(object sender, RoutedEventArgs e)          {              string str = "E:\the long long path {0}.txt";              str = string.Format(str, new string(Enumerable.Range(0, 300).Select(temp => 'x').ToArray()));              var file = new FileInfo(str);              using (var stream = file.CreateText())              {                  stream.WriteLine("歡迎訪問我博客 http://lindexi.gitee.io 裏面有大量 UWP WPF 博客");              }          }

運行程序點擊按鈕會發現 var file = new FileInfo(str); 說文件名太長

System.IO.PathTooLongException:「指定的路徑或文件名太長,或者兩者都太長。完全限定文件名必須少於 260 個字符,並且目錄名必須少於 248 個字符。」

可以通過限定路徑的方法解決

在運行輸入 gpedit.msc 打開策略編輯器

點擊計算機配置-管理模板-所有設置,找到啟用win32長路徑選項

點擊編輯策略設置,啟用

如果要在應用程序可以使用長的文件名,當然單個文件名不能超過 265 字符,但是文件所在路徑可以超過。需要在 .NET 4.6.2 以上,添加清單

在清單 app.manifest 添加下面代碼

  <application xmlns="urn:schemas-microsoft-com:asm.v3">        <windowsSettings xmlns:ws2="https://schemas.microsoft.com/SMI/2016/WindowsSettings">            <ws2:longPathAware>true</ws2:longPathAware>        </windowsSettings>    </application>

此時可以嘗試寫長路徑

        static void Main(string[] args)          {              var folder = Path.GetTempPath();                for (int i = 0; i < 300; i++)              {                  folder = Path.Combine(folder, i.ToString());                  Directory.CreateDirectory(folder);              }                var file = new FileInfo(Path.Combine(folder, "1.txt"));              var fileStream = file.Create();          }