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(); }