如何用C++检查文件是否包含在文件夹中



假设一个文件&文件夹确实存在,我想要一个函数来检查该文件是否包含在该文件夹中。

例如:/a/b包含/a/b/c/d.e/a/b包含/a/b/c.d/a/b不包含/a/b/../c/d.e

我现在得到的是规范化路径,然后比较前缀部分。有什么干净简单的方法可以做到这一点吗?

只有在C++17中才有std::filesystem API具有这样的功能
对于早期的C++版本,您必须回退到boost或系统特定的库。

遗憾的是,std::filesystem::path没有直接方法,但这应该可以完成任务:

using std::filesystem::path;
path normalized_trimed(const path& p)
{
auto r = p.lexically_normal();
if (r.has_filename()) return r;
return r.parent_path();
}
bool is_subpath_of(const path& base, const path& sub)
{
auto b = normalized_trimed(base);
auto s = normalized_trimed(sub).parent_path();
auto m = std::mismatch(b.begin(), b.end(), 
s.begin(), s.end());
return m.first == b.end();
}

现场演示

我假设文件路径如下:C: \Program Files\Important\data\app.exe而文件夹路径是这样的:C: \程序文件因此,你可能想试试这个代码:

#include <iostream>
#include <string>
using namespace std;
int main()
{
string filePath, folderPath;
cout << "Insert the full file path along with its name" << endl;
getline(cin,filePath); //using getline since a path can have spaces
cout << "Insert the full file folder path" << endl;
getline(cin,folderPath);
if(filePath.find(folderPath) != string::npos)
{
cout << "yes";
}
else
{
cout << "yes";
}
return 0;
}

相关内容

  • 没有找到相关文章

最新更新