2011-01-05 27 views
11

我想使用Boost.Filesystem庫來操作路徑,文件和目錄。 我的問題是支持比MAX_PATH更長的路徑嗎?Boost.Filesystem中的MAX_PATH限制

我知道在Win32API的,我們有解決辦法「\\?\」,但它不是由像PathAppend和PathCombine基本功能的支持。

所以我在尋找有關MAX_PATH和Boost.FS任何有用的信息。

感謝

UPD:我關心像路徑追加所有操作,路徑結合起來,等等(我在的Win32API的功能,但它們不與路徑超過MAX_PATH不再工作) 例如CreateFileW和DeleteFileW兩者都支持比MAX_PATH更長的路徑。 月Boost.FS是Win32API的實用功能的替代品,如在SHLWAPI和SHELL32往往不支持長路徑

回答

4

事實是,Windows支持任何長度的路徑,以及任何路徑可被轉換成字符串的窗口上。在這種情況下需要添加\\?\,但這是「從給定路徑中創建字符串」操作的一部分。

AFAIK,Boost :: FileSystem在windows上做這個錯誤。

我不知道是否計劃修復。請參閱this關於應該如何完成。

-2

你可以操縱的文件系統路徑字符串的任何長度有或無Boost.Filesystem的發現。

MAX_PATH是Windows文件API的限制。也就是說,不能將太長的路徑字符串傳遞給Windows API。

例如,除去Boost.Filesystem的的函數將會失敗超過MAX_PATH長度路徑更長。你希望Boost.Filesystem執行如改變當前目錄和使用相對路徑來防止MAX_PATH限制?我不這麼認爲。

EDITED

因爲Boost.Filesystem的基於C++字符串來實現,你不需要擔心路徑長度。 Boost.Filesystem不僅提供路徑字符串操作方法,還提供文件系統操作方法。如果產生的路徑太長,您應該避免使用文件系統方法。

我不知道要不要Boost.Filesystem的支持Unicode的Win32的路徑,但你可以轉換調用Win32文件API的決賽前路徑ANSI到Unicode路徑。

+1

「MAX_PATH是Windows文件的API的限制。」 - 這是不正確的,因爲你可以關閉路徑解析,允許更長的路徑(見如何做到這一點的問題)。 – Philipp 2011-01-05 22:15:05

+1

@Philip並非所有API都支持「\\?\」解決方法。 – 9dan 2011-01-06 02:19:15

+0

是的,並非所有人都支持它們,但大多數內核API都支持它,OP希望在Boost.Filesystem中提供這種支持。 – Philipp 2011-01-06 12:50:12