Última atualização:2026-10-12
C++17 e SQLite para medir o tamanho de diretórios¶
Projeto prático: cálculo e armazenamento do tamanho de pastas com C++17 e SQLite¶
Esta seção gira em torno de um cenário de projeto: suponha que o negócio precise verificar periodicamente o tamanho de certas pastas e fazer uma operação de persistência — como o C++ pode realizar esse projeto?
Nesta seção, por meio de um projeto pequeno, você implementa com C++17 e SQLite um sistema de cálculo e armazenamento do tamanho de pastas, ajudando-o a gerenciar melhor o seu sistema de arquivos.
Objetivo do projeto¶
Implementaremos as seguintes funcionalidades: 1. Calcular recursivamente o tamanho do diretório especificado e de seus subdiretórios. 2. Salvar o resultado do cálculo em um banco de dados SQLite, facilitando consultas e análises posteriores. 3. Alta extensibilidade: você pode modificar o projeto com facilidade, adicionando suporte multi-thread, otimizando o desempenho ou armazenando os resultados em outro banco de dados.
Nota: versão para preguiçosos, o código completo já foi publicado na planeta.
Etapas de implementação do projeto¶
1. Ambiente¶
Primeiro, você precisa garantir que as seguintes ferramentas estejam instaladas no ambiente de desenvolvimento: - Compilador com suporte a C++17: como o g++, cuja versão pode ser verificada com o comando a seguir:
Certifique-se de que o g++ dá suporte ao padrão C++17.- SQLite3: para as operações de banco de dados usaremos o SQLite, que você pode instalar pelo gerenciador de pacotes:
Após a instalação, a biblioteca de desenvolvimento
libsqlite3-devdo banco SQLite garante que possamos usar o SQLite normalmente em C++.
2. Criar a estrutura do projeto¶
Dividiremos o código em vários módulos, mantendo uma arquitetura clara:
- folder_size.h / folder_size.cpp: responsáveis por calcular recursivamente o tamanho do diretório e de seus subdiretórios.
- database.h / database.cpp: encapsulam a lógica de operação do banco de dados SQLite.
- main.cpp: entrada do programa principal, responsável pelo controle do fluxo geral.
A estrutura de diretórios do projeto é a seguinte:
3. Implementação do código¶
Em seguida, implementaremos cada módulo passo a passo.
3.1 Módulo de cálculo de diretórios¶
O C++17 fornece a biblioteca std::filesystem para percorrer diretórios recursivamente e calcular tamanhos. Portanto, sua implementação central é a seguinte:
uintmax_t total_size = 0;
for (const auto& entry : fs::recursive_directory_iterator(dir_path)) {
if (fs::is_regular_file(entry.path())) {
total_size += fs::file_size(entry.path());
}
}
3.2 Operações com o banco SQLite¶
Include:
Uso:sqlite3_close(db_); // 关闭
// 插入
for (const auto& [folder, size] : folder_sizes) {
const std::string insert_sql =
"INSERT OR REPLACE INTO FolderSizes (Folder, Size) "
"VALUES ('" + folder + "', " + std::to_string(size) + ");";
if (!ExecuteSQL(insert_sql)) {
return false;
}
}
// 执行
sqlite3_exec
4. Compilação e execução¶
Compilar o projeto é muito simples:
Depois, execute o programa para calcular o tamanho dos diretórios e armazená-lo no banco de dados: O programa calculará recursivamente o tamanho do diretório especificado e salvará o resultado no banco de dadosfolder_sizes.db.
5. Consultar o banco de dados¶
Por fim, você pode consultar o conteúdo do banco de dados pela
ferramenta de linha de comando do SQLite:
Isso exibirá todos os diretórios já salvos e seus respectivos tamanhos.Fim desta seção
Tópicos relacionados¶
- Escrevendo C++ FnOnce à mão | C++那些事
- Pequeno projeto de gRPC em C++ | C++那些事
- Comunicação entre processos em C++ na prática | C++那些事
- Demo de serviço de URL curta em C++ | C++那些事
- Testes de performance com Google Benchmark | C++那些事
- Servidor HTTP com corrotinas do C++20 | C++那些事
- Serialização ZeroCopy com Protobuf | C++那些事
- Acelerando Python com pybind11 | C++那些事
- Projeto de calculadora em pilha em C++ | C++那些事