Как я могу использовать регулярные выражения, чтобы определить наличие и размер групп файлов в C / C ++ в Linux?

У меня есть программа в системе Linux, которая генерирует файлы журнала данных с предсказуемыми именами файлов, к которым мне нужно получить доступ, но я должен сделать это через интерфейс C / C ++. Программа, обращающаяся к данным, должна иметь возможность указать путь к файлу с помощью регулярного выражения, чтобы указать определенные диапазоны имен файлов, и выполнить следующие действия:

  • Определите, существуют ли файлы, соответствующие регулярному выражению, которые существуют
  • Определите общий размер всех подходящих файлов

Я использую их как проверки перед тем, как сжать и передать файлы. Как я могу сделать это в C / C ++?

2

Решение

Вы могли бы сделать что-то вроде этого:

#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...
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector