Seu C++ não é só para jogos e drivers
\n\nQuando se fala em "C++", geralmente pensamos em artilharia pesada: engines Unreal, sistemas operacionais, servidores de alta carga. Mas existe um lado igualmente útil e muitas vezes esquecido: a automação de tarefas em C++. Enquanto seus colegas escrevem scripts Bash descartáveis ou sofrem com dependências do Python, você pode criar uma ferramenta compacta, rápida e que funciona por anos sem precisar atualizar o interpretador.
\n\nNeste artigo, vou mostrar como transformar o C++ em um canivete suíço para automação. Vamos explorar exemplos reais: desde renomear arquivos em lote até analisar logs e gerar relatórios. Você verá que a automação de rotinas com C++ não é complicada, e sim muito vantajosa em termos de velocidade e confiabilidade.
\n\nPor que C++ em vez de Python ou Bash?
\n\nCada linguagem tem seu lugar. Mas existem cenários onde o C++ se destaca:
\n\n- \n
- Velocidade de execução. Se você processa terabytes de logs, cada milissegundo conta. \n
- Sem dependências. Um único binário compilado estaticamente roda em qualquer Linux/Windows sem precisar instalar um interpretador. \n
- Segurança de tipos. Menos surpresas em tempo de execução — essencial para automação que roda em horários agendados. \n
- Acesso ao sistema. Trabalhe diretamente com WinAPI, POSIX, registro do Windows e processos, sem camadas intermediárias. \n
Claro, para protótipos rápidos, o Python é mais prático. Mas quando o script se torna parte do CI/CD ou da infraestrutura de produção, a automação com C++ se paga muitas vezes.
\n\nFerramentas: o que você precisa saber
\n\nPara nossas tarefas, não precisamos de todo o C++20. Um conjunto básico é suficiente:
\n\n- \n
std::filesystem(C++17) — manipulação de arquivos e pastas \nstd::regex— parsing de texto \nstd::fstream/std::stringstream— leitura e escrita \nstd::chrono— medição de tempo e logging \n
Compile com a flag -std=c++17 (ou /std:c++17 para MSVC).
Exemplo 1: Renomear arquivos em lote
\n\nImagine: você tem uma pasta com fotos IMG_001.jpg, IMG_002.jpg … e precisa renomeá-las para o formato 2025_01_15_001.jpg. Fazer manualmente leva 10 minutos entediantes. Com um script, leva 0,2 segundos.
Código
\n#include <iostream>\n#include <filesystem>\n#include <regex>\n#include <string>\n\nnamespace fs = std::filesystem;\n\nint main() {\n std::string dir_path = "./fotos";\n std::regex pattern(R"(IMG_(\\d+)\\.jpg)");\n std::string prefix = "2025_01_15_";\n\n for (auto &entry : fs::directory_iterator(dir_path)) {\n std::string filename = entry.path().filename().string();\n std::smatch match;\n\n if (std::regex_match(filename, match, pattern)) {\n std::string new_name = prefix + match[1].str() + ".jpg";\n fs::rename(entry.path(), entry.path().parent_path() / new_name);\n std::cout << "Renomeado: " << filename << " -> " << new_name << "\\n";\n }\n }\n return 0;\n}\n\nEste exemplo mostra como a automação de tarefas em C++ com std::filesystem e expressões regulares resolve um problema do dia a dia em poucas linhas. Você pode adaptá-lo facilmente para seus próprios padrões.
Exemplo 2: Parsing de logs e contagem de erros
\n\nSuponha que um servidor gere logs no formato:
\n2025-01-15 10:23:45 [ERROR] Falha na conexão com o banco\n2025-01-15 10:23:46 [INFO] Tentativa #1\n2025-01-15 10:23:47 [ERROR] Tempo limite excedido\n\nPrecisamos coletar estatísticas: quantos erros de cada tipo e exibir o top 5 das mensagens mais frequentes. Um script Bash até resolve, mas se os logs tiverem gigabytes, o C++ será muito mais rápido.
\n\nCódigo
\n#inc