1

我能夠在Windows資源管理器中手動創建文件夾,完整路徑長度正好是247個字符(不包括尾部斜線)。據我所知,248是最大的文件夾名稱路徑限制,包括尾部斜槓。爲什麼Windows資源管理器允許創建文件夾太長,無法被Directory.Move移動 - 生成PathTooLongException?

然後我嘗試使用Directory.Move方法到這個文件夾重命名爲一個較短的路徑:

string folder247CharsLong = @"C:\first level folder path - will form 247 chars\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\ccccccccccccccccccccccccccccccccccccc"; 

string folder215CharsLong = @"C:\first level folder path - will form 247 chars\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\SHORT"; 

Directory.Move(folder247CharsLong, folder215CharsLong); 

這引發PathTooLongException - 他說:「完全合格的文件名必須少於260個字符,並且目錄名稱必須少於248個字符「。

我想這是因爲Directory.Move附加一個試運行斜線和然後檢查(路徑+「\」)。長度< 248.

具有相同路徑Directory.Delete方法不拋出。

我假設問題是Windows資源管理器允許創建這樣的文件夾,任何人都可以確認這是Windows資源管理器的行爲錯誤還是Directory.Move中的錯誤?

+0

我總是有同樣的問題,我現在對自己的回答是:_這是Windows API(Windows資源管理器)和.net framework._ – Bolu

回答

-1

它取決於用於引用文件/文件夾和它們正在使用的命名空間的API函數的版本。

在Windows API中,路徑的最大長度爲260,但unicode版本的API函數處理的擴展長度爲32767個字符。

請參閱Naming Files, Paths, and Namespaces在Microsoft文檔中的完整參考。

+0

之間的差異,請您澄清如何使用不同的API函數版本在Windows資源管理器與.NET BCL?你能否提供描述不同版本API函數的源代碼?我對你發佈的鏈接非常熟悉。儘管最大文件路徑長度爲260,文件夾名稱長度必須小於248個字符。我的問題是爲什麼.NET BCL和Windows Explorer有區別。我無法使用「擴展長度路徑」 - 與他們太多其他問題 – Marek

+0

@Marek,不知道你是否也知道它,但[這裏](http://blogs.msdn.com/b/bclteam/archive/2007 /02/13/long-paths-in-net-part-1-of-3-kim-hamilton.aspx),你會發現更多的信息。 –

+0

現在我明白你指的是具有「API函數版本」的unicode與標準文件API。您是否有任何參考資料指出Windows資源管理器在內部使用32767限制的API,而只是人爲地限制路徑長度? – Marek

相關問題