4
我正在嘗試使用boost創建相對路徑。使用boost創建相對路徑
我最初的計劃是:
string base_directory; // input
boost::filesystem::path base_path;
string other_directory; // input
boost::filesystem::path other_path;
// assume base_path is absolute - did that already (using complete()
// if path is relative, to root it in the current directory) ->
base_directory = base_path.string();
if (other_path.empty())
other_directory = base_directory;
else
{
other_path = boost::filesystem::path(other_directory);
if(!other_path.is_complete())
{
other_path = base_path/other_path;
other_directory = other_path.string();
}
if(!boost::filesystem::exists(boost::filesystem::path(other_path)))
{
boost::filesystem::create_directory(other_path);
}
}
這工作得很好,如果other_directory是絕對的,或只是一個名稱(或相對內到base_directory)。
但是,如果我試圖把「..」或「../other」放在奇怪的結構中,比如「c:\ test ..」或「c:\ test .. \ other」
如何正確創建相對路徑,最好使用boost?我試圖查看文檔...沒有積極的成功。
我使用Windows(我的提振偏好是,這應該是多平臺的,我已經依賴於它)
編輯:我有提高1.47
謝謝你的任何建議。
謝謝,但它似乎不可用。我提高了1.47(沒有想到它有什麼區別)在您的建議提示下,我查看並發現文檔中的「正常化」,但它並未顯示在boost :: filesystem(或filesystem3)列表中 – Thalia 2013-04-24 22:20:04
如果存在是沒有選擇「封鎖」它,我會接受這一點,我不知道這確實是一個有效的路徑 - 只有在這個答案後,我有勇氣去測試它。 – Thalia 2013-04-24 22:26:53
@Thalia你太親近了!我做了一些小小的研究,並在[boost 1.48](http://www.boost.org/doc/libs/1_48_0/libs/filesystem/v3/doc/reference.html#canonical)中添加了該函數。 :( – 2013-04-24 23:06:03