回答
std::string::find()
點返回的索引在該字符串中發現,爲0的索引是字符串的開始:
std::string path("/my/path/test/mytestpath");
// This will check if 'path' begins with "/my/path/".
//
if (0 == path.find("/my/path/"))
{
// 'path' starts with "/my/path".
}
可以對較短字符串中的字符數進行字符串比較。
是自身的字符匹配並不意味着它事實上是一個子路徑,因爲你需要檢查的是,在較長的字符串的下一個字符是「/」
在C你可以使用STRNCMP ()需要一段字符。
在C++中,您可以使用相同或字符串比較函數。 find()函數將爲此工作,但請記住還要檢查主路徑中的下一個字符是否爲目錄分隔符。
你可以「標記」你的路徑,但這可能不值得。
需要額外檢查+1(除非您確保較短路徑以'/'結尾)。 – 2012-03-09 15:36:01
Boost.Filesystem可能是最健壯的解決方案。嘗試是這樣的:
bool isSubDir(path p, path root)
{
while(p != path()) {
if(p == root) {
return true;
}
p = p.parent_path();
}
return false;
}
+1。趙靖真的很想知道什麼;目前的描述聽起來像是他在解決問題的過程中被卡住了。 – MSalters 2012-03-09 15:48:28
根據你想要的行爲,使用'equivalent'而不是'operator =='可能更好。 – 2012-03-09 15:57:42
- 1. 如何讀取文本文件的路徑,並在該路徑
- 2. 給予在C#中的文件路徑
- 3. 列出給定路徑的文件夾的絕對路徑 - shell
- 4. 查找給定路徑的根路徑
- 5. 存在給定路徑的文件
- 6. 如何從給定文件夾路徑獲取文件夾路徑?
- 7. 如何給$ http的文件路徑
- 8. 如何將log4j.properties文件的路徑更改爲特定路徑?
- 9. 文件路徑路徑
- 10. C#:如何獲得Process.Start在給定文件時沒有路徑時將使用的可執行文件路徑?
- 11. 解析給定的路徑在C#
- 12. 獲取給定路徑的文件ID
- 13. c#不支持給定路徑的格式。 UNC路徑
- 14. 在給定路徑找不到文件
- 15. 得到給定一個路徑和文件名路徑名
- 16. 如何更換文件路徑,在該文件路徑刪除一些路徑,並同時更換\到/
- 17. boost :: filesystem ::路徑的Unicode文件路徑?
- 18. 新的文件(路徑)或class.getResourses(路徑)?
- 19. 讀/寫文件與UNC路徑 - 在C++
- 20. 獲取路徑/ FILNAME的路徑,但該文件沒有擴展
- 21. 路徑變量:查找特定文件的文件夾路徑
- 22. 如何在文件路徑與模式
- 23. 從給定路徑
- 24. 有路徑的地圖如何將tham與給定路徑進行比較?
- 25. 如何指定flowconfig文件的路徑?
- 26. 如何打開的文件的路徑爲路徑的目錄
- 27. 獲取給定的路徑
- 28. 給定的路徑不支持C#
- 29. 如何確定給定路徑是文件還是文件夾?
- 30. 如何在路徑的給定部分下找到文件夾?
這聽起來像一個簡單的[有問題的開始(http://stackoverflow.com/questions/931827/stdstring-comparison-check-whether-string-begins-with-another-string )除非你打算擴展路徑(例如'〜') – Joe 2012-03-09 15:02:40
即使沒有擴展,它也不是那麼簡單,@Joe。文件*字符串*以'/ my/pa'開頭,但*路徑*不包含它。 – 2012-03-09 15:07:01
您可能需要首先對路徑進行規範化,特別是在UNIX系統中使用特殊通配符和符號鏈接。 – CashCow 2012-03-09 15:07:26