C++:如何判断文件的路径是否以给定的路径开始



例如,我有一个名为的路径

/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;
}
  1. 从开头减去原始字符串(/my/path/test/mtestpath)的长度(/my/path)
  2. 检查两个字符串是否相等

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

字符本身匹配并不意味着它是一个子路径,因为您需要检查较长字符串中的下一个字符是否为"/"

在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".
}

最新更新