2012-05-09 32 views
9

如何在C++中獲得平臺特定的路徑分隔符(而不是目錄分隔符),即組合列表中多個路徑所需的分隔符(例如PATH環境變量)。如何在C++中獲取特定於平臺的路徑分隔符?

在Linux下,這將是:時,Windows ;下。

換句話說,我正在尋找C++ - 相當於Python的os.pathsep,Java的path.separator或PHP的PATH_SEPARATOR

如果加速提供這樣會好一些,因爲我們在我們的項目中使用也無妨的功能。如果不是的話,我想任何其他解決方案都會很好。

我所能找到的(這裏和其他地方)只是檢索目錄分隔符(即/\)或與C++不同的其他語言相關的方法。

+0

可能重複[獲取使用Boost.Filesystem的平臺的路徑分隔符(http://stackoverflow.com/questions/8384477/obtain -platforms-path-separator-using-boost-filesystem) – Flexo

+3

@awoodland:真的嗎?你讀過這個問題了嗎? – Nick

+0

@Nick - 哎呀,對不起,我讀了很多「路徑分隔符」這個短語並記住了這個問題 - 絕對不是重複的,然後 – Flexo

回答

6

按照評論,一個可能性是使用預處理:中

#ifdef _WIN32 
const std::string os_pathsep(";"); 
#else 
const std::string os_pathsep(":"); 
#endif 
+0

同意。我們在這裏討論5行代碼。您可以在Google發佈它的時間內寫出這100次,並在SO上提出問題。並非所有的東西都需要高度設計,優雅和崇高的解決方案。 –

+0

許多平臺相關的東西都可以歸結爲幾行代碼。儘管如此,還有一些庫(像上面提到的APR,我也希望Boost也可以)提供這種功能,並確保將來的平臺也能妥善處理,而且不需要我照顧。我驚訝地發現很多其他語言(或者這些語言的庫)提供了這個,但是C++沒有。 –

+0

正如我確信你知道的那樣,這些圖書館通常依賴於那些專門利用業餘時間進行改進的人。爲什麼不自己去拿一些東西加入boost :: filesystem庫? – Nick

4

超出了使用預處理器的,我可以找到會通過Apache便攜式運行的唯一可移植的方式:

apr_filepath_list_mergeapr_filepath_list_split

你可以看看,看看這些實現,但我猜這只是一個預處理器的定義。

+0

僅僅爲此使用APR可能會矯枉過正......! – Nick

+0

我剛剛檢查了代碼。 APR具有平臺相關的實現(獨立源文件),其中適當的字符在函數中被硬編碼。 –

相關問題