如何使用正则expression式来确定Linux上C / C ++文件组的存在和大小?

我有一个Linux系统上的程序,用于生成需要访问的可预测文件名的数据日志文件,但是我必须通过C / C ++接口来完成。 访问数据的程序需要能够使用正则expression式获取文件path来指定某些文件名称范围,并执行以下操作:

  • 确定是否存在与存在的正则expression式匹配的文件
  • 确定所有匹配文件的总大小

我在压缩和传输文件之前使用这些作为检查。 我怎样才能在C / C ++中做到这一点?

你可以做这样的事情:

 #include <regex> #include <string> #include <experimental/filesystem> // make using it sane namespace fs = std::experimental::filesystem; int main(int argc, char** argv) { // default to current directory fs::path dir = argv[1] ? argv[1] : "."; fs::directory_iterator dir_ent{dir}; fs::directory_iterator dir_end; std::regex e{R"~(.*\.txt)~"}; std::smatch m; decltype(fs::file_size("")) total_size = 0; for(; dir_ent != dir_end; ++dir_ent) { // for some reason regex_match won't accept temporaries std::string s = dir_ent->path().string(); if(!std::regex_match(s, m, e)) continue; // deal with filepath here total_size += fs::file_size(dir_ent->path()); // etc... } }