2012-03-09 162 views
1

我有一个路径,例如,名为开始C++:如何在该文件的路径与给定的路径

/我的/路径/测试/ mytestpath

判断,我想,如果它与给定的路径入手,来判断例如

/我的/路径

+0

这听起来像一个简单的[有问题的开始(http://stackoverflow.com/questions/931827/stdstring-comparison-check-whether-string-begins-with-another-string )除非你打算扩展路径(例如'〜') – Joe 2012-03-09 15:02:40

+0

即使没有扩展,它也不是那么简单,@Joe。文件*字符串*以'/ my/pa'开头,但*路径*不包含它。 – 2012-03-09 15:07:01

+1

您可能需要首先对路径进行规范化,特别是在UNIX系统中使用特殊通配符和符号链接。 – CashCow 2012-03-09 15:07:26

回答

1

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". 
} 
+0

hmjd,感谢您的帮助。但是我需要判断路径是否以“/ my/path”开头,不仅包含。 – zhaojing 2012-03-09 15:03:24

+0

@赵靖代码确实如此。 – 2012-03-09 15:03:42

+0

@赵经,更新答案和解释。 – hmjd 2012-03-09 15:04:24

1
  1. 子字符串的字符串原始的长度(/我的/路径)(/我的/ path/test/mytestpath)。
  2. 检查两个字符串是否相等。
+0

好的建议!谢谢,我会尝试。 – zhaojing 2012-03-09 15:04:00

+1

您必须考虑检查'/ my/path /',否则'/ my/pathSomeDeviatingPath /'将会匹配。注意'/'。 – Mahesh 2012-03-09 15:10:18

+0

感谢您提醒〜 – zhaojing 2012-03-09 15:19:32

1

可以对较短字符串中的字符数进行字符串比较。

是自身的字符匹配并不意味着它事实上是一个子路径,因为你需要检查的是,在较长的字符串的下一个字符是“/”

在C你可以使用STRNCMP ()需要一段字符。

在C++中,您可以使用相同或字符串比较函数。 find()函数将为此工作,但请记住还要检查主路径中的下一个字符是否为目录分隔符。

你可以“标记”你的路径,但这可能不值得。

+0

需要额外检查+1(除非您确保较短路径以'/'结尾)。 – 2012-03-09 15:36:01

6

Boost.Filesystem可能是最健壮的解决方案。尝试是这样的:

bool isSubDir(path p, path root) 
{ 
    while(p != path()) { 
     if(p == root) { 
      return true; 
     } 
     p = p.parent_path(); 
    } 
    return false; 
} 
+0

+1。赵靖真的很想知道什么;目前的描述听起来像是他在解决问题的过程中被卡住了。 – MSalters 2012-03-09 15:48:28

+0

根据你想要的行为,使用'equivalent'而不是'operator =='可能更好。 – 2012-03-09 15:57:42

相关问题