所以...我有一個基本路徑和一個新路徑。新路徑包含它的基本路徑。我需要看看新途徑有什麼不同。就像我們有/ home /和新路徑是/ home/apple/one,我需要從它得到蘋果/一個。注意 - 當我從(homePath/diffPath)創建一些路徑時,我需要再次獲得/ home/apple/one。如何用Boost FileSystem做這樣的事情?如何從另一個路徑中減去一條路徑?
3
A
回答
8
使用stem()和parent_path()並從新路徑向後走,直到我們回到基路徑,這可行,但我不確定它是否非常安全。 要謹慎,因爲路徑「/ home」和「/ home /」被視爲不同的路徑。以下僅適用於基本路徑爲/ home(不帶結尾斜線)且新路徑保證位於目錄樹中的基本路徑之下的情況。
#include <iostream>
#include <boost/filesystem.hpp>
int main(void)
{
namespace fs = boost::filesystem;
fs::path basepath("/home");
fs::path newpath("/home/apple/one");
fs::path diffpath;
fs::path tmppath = newpath;
while(tmppath != basepath) {
diffpath = tmppath.stem()/diffpath;
tmppath = tmppath.parent_path();
}
std::cout << "basepath: " << basepath << std::endl;
std::cout << "newpath: " << newpath << std::endl;
std::cout << "diffpath: " << diffpath << std::endl;
std::cout << "basepath/diffpath: " << basepath/diffpath << std::endl;
return 0;
}
0
其他的解決方案,如果你知道newpath
真正屬於basepath
,可能是:
auto nit = newpath.begin();
for (auto bit = basepath.begin(); bit != basepath.end(); ++bit, ++nit)
;
fs::path = path(nit, newpath.end());
相關問題
- 1. 如何從一個路徑
- 2. 在makefile中,如何獲取從一個絕對路徑到另一個絕對路徑的相對路徑?
- 3. 如何修剪重定向網址?從路徑到另一條路徑?
- 4. ANT:如何從一個路徑「添加」路徑元素到第二個路徑?
- 5. 的Python:絕對路徑相對讓到另一條路徑
- 6. 如何創建一個條件路徑
- 7. Android在另一條路徑上繪製一條路徑的頂部
- 8. URL重寫IIS - 地圖從一條路徑通往另一個
- 9. 如何在草圖中從矩形中減去矢量路徑
- 10. Django減去路徑中的符號
- 11. 的Rails給出另一條路徑
- 12. d3.js從一個路徑
- 13. 如何從一個路徑在Perl
- 14. 如何從一個文件夾路徑
- 15. C++如何從一個路徑
- 16. 如何從一個路徑VBA
- 17. 減去(遮罩?)一個圓形的路徑
- 18. 如何使用shell腳本將文件從一個路徑移動到unix中的另一個路徑
- 19. 將畫布與多條路徑組合到一條路徑
- 20. Paper.js借鑑一條路徑
- 21. Angular2路由器:如何從父路徑到子路徑共享一個值?
- 22. 如何從另一個報告中指定報告的路徑?
- 23. 如何從另一個動作中找到api動作路徑
- 24. Laravel - 在另一條路徑中使用路由名稱
- 25. SVG減去對象和路徑
- 26. XNA,C# - 檢查一個Vector2路徑是否跨越另一個Vector2路徑
- 27. 從兩條相交路徑中獲取三條合成路徑
- 28. 如何將CAShapeLayer的路徑動畫順暢地移動到另一個路徑?
- 29. 最短路徑查詢返回許多路徑而不是一條路徑
- 30. C# - 如何從一個路徑複製SQLite數據庫並將其粘貼到另一個路徑?