例如,我有一个名为的路径
/my/path/test/mystpath
,我想判断它是否从给定的路径开始,例如
/my/path
C++17文件系统库可能是最健壮的解决方案。如果您无法使用C++17,Boost.Filesystem将为早期的C++版本提供实现。试试类似的东西:
bool isSubDir(path p, path root)
{
while(p != path()) {
if(p == root) {
return true;
}
p = p.parent_path();
}
return false;
}
- 从开头减去原始字符串(/my/path/test/mtestpath)的长度(/my/path)
- 检查两个字符串是否相等
您可以对较短字符串中的字符数进行字符串比较。
字符本身匹配并不意味着它是一个子路径,因为您需要检查较长字符串中的下一个字符是否为"/"
在C中,您可以使用strncmp(),它的长度为个字符。
在C++中,您可以使用相同的函数或字符串比较函数。find()函数将适用于此,但请记住还要检查主路径中的下一个字符是否为目录分隔符。
你可以"标记化"你的路径,但这可能不值得。
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".
}