2013-03-15 33 views
5

Boost_filesystem kullanıldığında, Boost dosya isimlerine tırnak işaretleri eklemeye devam ediyor.boost :: dosya sistemi tırnak işareti ekliyor mu?

foo.cpp: Derleyen

#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 

Çıktı:

./foo 
"./foo" 
"foo" 

Bu benim durumumda biraz beklenmedik ve zahmetli bir iştir. Bu gerçekten kasıtlı mı, yoksa bu benim için daha eski bir Boost (1.46.1) arabası mı? Eklenmelerini önlemek için bir yol var mı?

Dokümantasyona göz attım, ancak örnek çıktılarında bu tırnak işaretlerini gösteren öğreticilerinin dışında, ben aydınlanmamıştım.

cevap

6

1.47.0 sürümündeki çerçeve.

önerilen geçici çözüm:

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

İstenmeyen yerleştirilmiş alanlar olduğundan ve ilgili kodu karıştırdığından kasıtlıdır. Yapabileceğiniz en iyi muhtemelen:

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

DÜZENLEME rağmen

, this link göre, gibi bir şey deneyebilirsiniz: Bu aslında Boost tarihinde dosyalanan bir bug olduğunu

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

Eh, ben de Tırnakları kendim ekleyebilir gömülü alanların korkuyorum eğer. Bir günlük çıktısında dosya adını kullanmadan önce bunları * kaldırmak * zorunda olmak bir sıkıntı olsa da - ve 'replace_all()' gerçekten yardımcı olmaz çünkü beyin ölümü olabileceğinden gömülü olabilir * tırnak işareti olabilir * dosya adı da. ;-) – DevSolar

+0

Tamam, ama hata raporunun önerdiği şeyi yapabilirsin: std :: cout << p.filename(). String() << std :: endl; –

+0

Bitti, test edilmedim ve işlenmeden önce burada bile cevaplandım/cevaplandım. ;-) – DevSolar

İlgili konular