所以...我有一個基本路徑和一個新路徑。新路徑包含它的基本路徑。我需要看看新途徑有什麼不同。就像我們有/ 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. 如何減去elisp中的路徑?
- 2. 在makefile中,如何獲取從一個絕對路徑到另一個絕對路徑的相對路徑?
- 3. 如何在svg中將一條路徑分成兩條路徑
- 4. SVG路徑與另一條路徑的一段吻合
- 5. 地圖圖像路徑到ASP.NET中的另一條路徑
- 6. 如何修剪重定向網址?從路徑到另一條路徑?
- 7. ANT:如何從一個路徑「添加」路徑元素到第二個路徑?
- 8. 的Python:絕對路徑相對讓到另一條路徑
- 9. Android在另一條路徑上繪製一條路徑的頂部
- 10. 如果路徑符號鏈接到另一個路徑
- 11. URL重寫IIS - 地圖從一條路徑通往另一個
- 12. 如何從一個UIImage複製任意路徑到另一個
- 13. 如何在草圖中從矩形中減去矢量路徑
- 14. Django減去路徑中的符號
- 15. 的Rails給出另一條路徑
- 16. 如何有效檢查一條路徑是否是C#中另一條路徑的子節點?
- 17. 重路由NGINX路徑到另一條路徑(不包括HTTP重定向)
- 18. 去拿路徑
- 19. C++如何從一個路徑
- 20. 如何從一個路徑在Perl
- 21. 如何從一個路徑VBA
- 22. 如何從一個文件夾路徑
- 23. 如何從一個路徑字符串
- 24. Apache mod_rewrite別名到另一個路徑的路徑
- 25. 減去(遮罩?)一個圓形的路徑
- 26. 如何使用shell腳本將文件從一個路徑移動到unix中的另一個路徑
- 27. Angular2路由器:如何從父路徑到子路徑共享一個值?
- 28. Paper.js借鑑一條路徑
- 29. MKMapView - 撫摸一條路徑
- 30. 將畫布與多條路徑組合到一條路徑