2013-03-15 15 views
5

boost_filesystemを使用している場合、Boostはファイル名に引用符を追加し続けます。boost :: filesystem引用符を追加しますか?

foo.cpp:コンパイル

#include <iostream> 
#include <boost/filesystem.hpp> 

int main(int argc, char * argv[]) 
{ 
    std::cout << argv[0] << std::endl; 
    boost::filesystem::path p(argv[0]); 
    std::cout << p << std::endl; 
    std::cout << p.filename() << std::endl; 
    return 0; 
} 

g++ foo.cpp -o foo -lboost_filesystem -lboost_system 

出力:

./foo 
"./foo" 
"foo" 

これは私の場合はやや予想外の、そして不便です。これは本当に意図的なのでしょうか、それとも私のやや古いバージョンのBoost(1.46.1)バグですか?私はそれらが追加されることを避けることができるいくつかの方法はありますか?

私はマニュアルを精読しましたが、チュートリアル以外にも、では引用符が表示されていましたが、私は啓発されませんでした。

答えて

6

をバージョン1.47.0のフレームワーク

提案回避策は次のとおりです。

std::cout << path("/foo/bar.txt").filename().string() 
4

予期せぬ埋め込みスペースがあり、関連するコードが混乱するため意図的です。あなたができる最善のは、おそらくです:

boost::replace_all(yourquotedstring, "\"", ""); 

EDITが、

this linkによると、あなたのような何かを試すことができます。これは実際にブースト日に出願されたbugある

std::cout << path("/foo/bar.txt").filename().string(); 
+0

まあ、私は私がよく引用符を自分で追加することができます埋め込まれたスペースのが怖い場合。 *ログ出力でファイル名を使用する前にそれらを削除しなければならないのは厄介です - そして、 'replace_all()'は本当に助けになりません。脳死です。埋め込み*引用符*ファイル名にも。 ;-) – DevSolar

+0

しかし、あなたはバグレポートが示唆していることをすることができます:std :: cout << p.filename()。string()<< std :: endl; –

+0

私が前にアップ/回答した前に、完了し、テストされ、コミットされました。 ;-) – DevSolar

関連する問題