2013-03-15 13 views
5

Quando si utilizza boost_filesystem, Boost continua ad aggiungere virgolette ai nomi dei file.boost :: filesystem aggiungendo le virgolette?

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; 
} 

Compilato:

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

uscita:

./foo 
"./foo" 
"foo" 

Questo è un po 'inaspettato, e scomodo nel mio caso. E 'davvero intenzionale, o la mia versione un po' più vecchia di Boost (1.46.1) è bacata da questo punto di vista? C'è un modo per evitare che vengano aggiunti?

Ho letto la documentazione, ma a parte le esercitazioni non mostrando quelle virgolette nel loro output di esempio, non ero illuminato.

risposta

6

Questo è in realtà un bug depositata il Boost framework sulla versione 1.47.0.

La soluzione proposta è:

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

È intenzionale perché gli spazi incorporati imprevisti e confondono il codice correlato. Il meglio che puoi fare è probabilmente:

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

EDIT

Anche se, secondo this link, si può provare qualcosa di simile:

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

Beh, se ho paura di spazi incorporati posso anche aggiungere citazioni me stesso. Dovendo * rimuoverli * prima che io possa usare il nome del file in un output di log è comunque una seccatura - e 'replace_all()' non aiuta molto perché, come potrebbe essere, potrebbe esserci un segno di citazione incorporato * * anche nel nome del file. ;-) – DevSolar

+0

Ok, ma si potrebbe fare ciò che suggerisce il bug report: std :: cout << p.filename(). String() << std :: endl; –

+0

Fatto, testato e impegnato prima ancora di avere upvoted/risposto qui. ;-) – DevSolar