2010-08-28 72 views
3

我只是偶然在this article MSDN上寫着一個路徑可以是259個字符+ NUL終止,但如果你使用前綴「\\?\」 WinAPI的允許您使用的擴展長度路徑是否安全使用?

最大總路徑長度32,767個字符。

急於看到它的工作我試圖從資源管理器(在XP SP3)使用該前綴,但它根本不工作(任何路徑)。如果您將\\?\C:\Path\to\an\existing.file放在資源管理器的欄上,它會顯示「文件未找到」錯誤。

所以我很困惑。我可以爲(非古老)Windows編碼的東西,充分利用NTFS上提到的路徑大小?爲什麼Explorer不使用它?

+0

至少在Windows 7中可用。在XP中,調用API函數時它可能工作,但在explorer.exe的GUI中輸入路徑時(可能允許立即使用長度很大的路徑),它可能不起作用? – 2010-08-28 18:08:56

+0

嗯,我見過軟件(不記得是哪個)在XP中創建了大於259的文件的文件,但是explorer沒有讓我正確使用它們,甚至沒有刪除它們。要刪除它們,我必須將父文件夾重命名爲較短的名稱。 – 2010-08-28 18:12:24

回答

2

有一組API調用與擴展路徑一起工作,有些則沒有。 MSDN通常會提到這一點。

不是說,如果你只是在windows explorerunder xp中鍵入該路徑,這是行不通的,因爲擴展路徑語法只是WIn32 API的轉義序列而不是windows explorer。現在,在Win7中,這確實奏效,因爲很多人都希望這能夠起作用。

對於長路徑,如果您更改工作目錄或以子目錄爲根目錄打開資源管理器,它也會有所幫助。

+0

什麼? 「如果你改變工作目錄或以子目錄作爲根目錄打開資源管理器,它確實有幫助」你的意思是說Windows有一個'chroot'?或者你的意思是別的? – 2010-08-30 10:34:58

+0

是的 - 有一個SetCurrentDirectory()我可能是錯的 - 但在過去的某個時候我認爲*有幫助。至少如果應用以相對路徑進行交易,而不是絕對路徑。 – 2010-08-30 18:01:17

+0

選擇,因爲它已經有一段時間了。 – 2011-12-29 22:23:58

1

之前有人告訴我RTFM ...

注意,這些例子只是爲了與Windows API函數使用,它們不一定都與Windows外殼應用程序,如Windows資源管理器的工作。

對於文件I/O,路徑字符串的「\\?\」前綴告訴Windows API禁用所有字符串解析並將緊隨其後的字符串直接發送到文件系統。例如,如果文件系統支持較大的路徑和文件名,則可以超出Windows API強制執行的MAX_PATH限制。

在備註上,這讓我想知道通過使用非法文件名來從資源管理器隱藏文件(或查找此類文件)的可能性。

0

你問你爲什麼Windows中的所有組件不支持它,或者你問是否合法使用這些長路徑?

您絕對可以安全地使用它們,但是您可能會激怒想要使用Explorer等工具瀏覽它們的人。我們一直在野外看到這樣的路徑。有時當人們不能使用MY_FAVORITE_TOOL刪除它時,他們會很驚訝......

+0

我實際上正在考慮開發一個比Explorer更不笨的文件瀏覽器。我的意思是,NTFS提供了一個Unix類似的可能性的世界,在XP中不會被使用。 – 2010-08-30 10:38:07

+0

編輯:*「我正在考慮開發一個文件瀏覽器」* =現在和結束之間的某個時候。 – 2010-08-30 10:40:44

相關問題