簡體   English   中英

boost :: filesystem :: path :: native()返回std :: basic_string <wchar_t> 而不是std :: basic_string <char>

[英]boost::filesystem::path::native() returns std::basic_string<wchar_t> instead of std::basic_string<char>

雖然以下代碼在Linux上編譯,但我無法在Windows上編譯它:

boost::filesystem::path defaultSaveFilePath( base_directory );
defaultSaveFilePath = defaultSaveFilePath / "defaultfile.name";
const std::string s = defaultSaveFilePath.native();
return save(s);

其中base_directory是類的屬性,其類型是std :: string,而函數save只需要一個const std :: string&作為參數。 編譯器抱怨第三行代碼:

對於這個軟件,我使用的是Boost 1.54(對於一些常用庫)和Qt 4.8.4(對於使用這個公共庫的UI),我使用MingW GCC 4.6.2編譯了所有內容。

似乎我的Windows Boost構建由於某種原因返回std :: basic_string。 如果我的評估是正確的,我問你: 我如何使Boost返回std :: string的實例? 順便說一下,有可能嗎?

如果我對問題做了不好的評價,請您提供一些有關如何解決問題的見解。

干杯。

在Windows上,boost :: filesystem根據設計將本機路徑表示為wchar_t - 請參閱文檔 這非常有意義,因為Windows上的路徑可以包含非ASCII Unicode字符。 你無法改變這種行為。

請注意, std::string只是std::basic_string<char> ,並且所有本機Windows文件函數都可以接受寬字符路徑名(只調用FooW()而不是Foo())。

如何使Boost返回std :: string的實例? 順便說一下,有可能嗎?

string()wstring()函數怎么樣?

const std::string s = defaultSaveFilePath.string();

還有

const std::wstring s = defaultSaveFilePath.wstring();

Boost Path有一個簡單的函數集,可以為您提供“本機”(即便攜式)格式的std :: string。 make_preferredstring結合使用。 這在Boost支持的不同操作系統之間是可移植的,並且還允許您在std::string

它看起來像這樣:

std::string str = (boost::filesystem::path("C:/Tools") / "svn" / "svn.exe").make_preferred().string();

或者,修改原始問題的代碼:

boost::filesystem::path defaultSaveFilePath( base_directory );
defaultSaveFilePath = defaultSaveFilePath / "defaultfile.name";
auto p = defaultSaveFilePath.make_preferred(); // convert the path to "preferred" ("native") format.
const std::string s = p.string(); // return the path as an "std::string"
return save(s);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM