2013-03-15 3 views
5

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" 

यह कुछ हद तक अप्रत्याशित, और मेरे मामले में असुविधाजनक है। क्या यह वास्तव में जानबूझकर है, या इस सम्मान में बूस्ट (1.46.1) छोटी गाड़ी का मेरा कुछ पुराना संस्करण है? क्या कोई रास्ता है जिससे मैं उन्हें जोड़ने से बचा सकता हूं?

मैंने प्रलेखन को प्रतिबिंबित किया, लेकिन ट्यूटोरियल से उनके उदाहरण आउटपुट में उन उद्धरण चिह्नों को दिखाते हुए, मुझे प्रबुद्ध नहीं किया गया था।

उत्तर

6

संस्करण 1.47.0 पर ढांचा।

प्रस्तावित समाधान नहीं है:

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

यह जानबूझकर है क्योंकि अप्रत्याशित एम्बेडेड रिक्त स्थान और भ्रमित संबंधित कोड। ,

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

संपादित

हालांकि 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

संबंधित मुद्दे