2010-10-14 17 views
28

Windows'ta göreli bir yol belirtmek için boost::filesystem::path'u nasıl kullanabilirim? Bu girişimi başarısız:boost :: dosya sistemi göreli yolu ve geçerli dizini?

boost:filesystem::path full_path("../asset/toolbox"); // invalid path or directory. 

Belki bana hata ayıklama yardımcı olmak için, nasıl boost :: dosya sistemi ile şimdiki çalışma dizinini alınır?

+0

Sadece açıklığa kavuşturmak için, sorunumu çözdüm. Yukarıdaki yöntem göreceli yol erişimi için doğrudur. Ancak, MSVS'de mevcut çalışma dizini beklediğim gibi değildi. hmuelner currentpath() yardımcı oldu. – Jake

cevap

51
getcwd = boost::filesystem::path full_path(boost::filesystem::current_path()); 

Örnek:

boost::filesystem::path full_path(boost::filesystem::current_path()); 
std::cout << "Current path is : " << full_path << std::endl; 

current_path birine erişmek için #include <boost/filesystem.hpp> eklemesi gerekir.

+1

Burada bir kusur var gibi görünüyor, bu geçerli bir C++ ifadesi değil, boost :: filesystem :: path ve full_path arasında bir şey eksik mi? – Sven

+1

Bu geçerli bir C++ ifadesi değil, yanıt için kısa yol gösterimi. Modern C++ 'da şunları yazabilirsiniz: auto cwd = boost :: fileystem :: current_path(); – hmuelner

0

"../your/path" yazdığınızda unix benzeri bir yol belirtmiyorsunuz değil mi? Sana sistemine özgü yolları almak için ne yapması gerektiğini düşünüyorum: Bu durumda

boost:filesystem::path full_path(".."/"asset"/"toolbox"); 

'/' bir sistem belirli bir şekilde yolları birleştirerek bir operatör ve belirttiğiniz yolun bir parçası değildir. Böyle bir şey daha sonra önceki dizine geçmek denemek istiyorsanız

+2

üzgünüm, ama bu işe yaramaz mı? – Jake

+1

Gerçekten değil ... Bir şekilde, eksi olmayan bir dosya olan dahili boost :: filesystem biçimindeki bir yolu belirtiyorsunuz. Ayrıca operatör notasyonunu daha çok beğeniyorum. Path full_path = path ("..")/"asset"/"toolbox" gibi bir şey yapmalısınız; –

+2

Ve pencerelerde '/' dizin sınırlayıcı olarak da kullanabilirsiniz. –

2

:

boost::filesystem::path full_path(boost::filesystem::current_path()); 
std::cout << "Current path is : " << full_path << std::endl; 

//system("cd ../"); // change to previous dir -- this is NOT working 
chdir("../"); // change to previous dir -- this IS working 

boost::filesystem::path new_full_path(boost::filesystem::current_path()); 
std::cout << "Current path is : " << new_full_path << std::endl; 
11

system_complete fonksiyonunu deneyin.

namespace fs = boost::filesystem; 

fs::path full_path = fs::system_complete("../asset/toolbox"); 

Bu, işletim sisteminin göreceli yolları nasıl çözeceğini tam olarak anımsatır.