2013-04-05 74 views
2

是我還是boost :: filesystem :: path :: make_preferred不是將「\」轉換爲「/」? !轉換從Windows到Linux文件路徑,然後再次使用boost :: filesystem

davidan @蘭伯特:〜/文檔/ PROG /工作$ ../practice/./path_info C:\鼻頭富/條\ baa.txt
組成路徑:
COUT < < - -----------:「c:pitou/foo/bar \ baa.txt」
make_preferred()----------:「c:pitou/foo/bar \ baa.txt」

我很希望爲

C:\鼻頭\富\酒吧\ baa.txt

在Windows和

/pitou/foo/bar/baa.txt

(或者相近)的POSIX

源是在這裏:boost::filesystem tutorial

+0

你不能使用常用的環境變量,例如: 'HOME'和'getenv'他們?包含在path.hpp中的 – 2013-04-05 19:46:52

+1

:>#ifdef BOOST_WINDOWS_API typedef wchar_t value_type; BOOST_STATIC_CONSTEXPR value_type preferred_separator = L'\\'; #else typedef char value_type; BOOST_STATIC_CONSTEXPR value_type preferred_separator ='/'; #endif所以這應該已經解決了,不是? – Sassinak 2013-04-05 20:35:36

+0

非,它不是... >> path&make_preferred(); 影響:包含的路徑名被轉換爲首選的本機格式。 [注意:在Windows上,效果是用反斜槓替換斜槓。在POSIX上,沒有任何效果。 - 結束註釋]我最終必須在ifdef posix條件下手動執行std :: replace – Sassinak 2013-05-15 13:19:10

回答

1

落得這樣做這樣說:

string f = filename; 
#  ifdef BOOST_POSIX_API //workaround for user-input files 
      std::replace(f.begin(), f.end(), '\\', '/');   
#  endif 

肯定有一個原因,爲什麼這個還沒有處理...?

1

它不是在Linux上處理的原因是很好地解釋這裏:

http://theboostcpplibraries.com/boost.filesystem-paths

報價:

如果舉例35.5在Linux上運行,返回的值是不同的 。大多數成員函數返回一個空字符串,除了返回「C:\ Windows \ System」的 relative_path()和filename()。此 意味着在Linux上將字符串「C:\ Windows \ System」解釋爲文件 名稱,這是可以理解的,因爲它既不是一個 路徑的便攜式編碼,也不是在Linux上的平臺相關編碼。因此,Boost.Filesystem別無選擇,只能將其解釋爲文件名稱 。

相關問題