Última actualización:2026-10-12
C++17 y SQLite para medir el tamaño de directorios¶
Proyecto práctico: cálculo y almacenamiento del tamaño de carpetas con C++17 y SQLite¶
Esta sección girará en torno al trasfondo de un proyecto: supongamos que el negocio necesita comprobar periódicamente el tamaño de ciertas carpetas y hacer una operación de persistencia, ¿cómo completar este proyecto en C++?
En esta sección, a través de un pequeño proyecto, implementarás con C++17 y SQLite un sistema de cálculo y almacenamiento del tamaño de carpetas que te ayudará a gestionar mejor tu sistema de archivos.
Objetivo del proyecto¶
Implementaremos las siguientes funciones: 1. Calcular recursivamente el tamaño del directorio indicado y sus subdirectorios. 2. Guardar el resultado del cálculo en una base de datos SQLite, para facilitar consultas y análisis posteriores. 3. Muy escalable: puedes modificar el proyecto con facilidad, añadir soporte multihilo, optimizar el rendimiento o almacenar los resultados en otra base de datos.
Nota: para perezosos, el código completo ya está publicado en la comunidad 星球.
Pasos de implementación del proyecto¶
1. Entorno¶
En primer lugar, debes asegurarte de tener instaladas en el entorno de desarrollo las herramientas siguientes: - Un compilador con soporte de C++17: por ejemplo g++; puedes comprobar la versión con el comando siguiente:
Asegúrate de que g++ admite el estándar C++17.- SQLite3: para las operaciones con la base de datos usaremos SQLite; puedes instalarlo con el gestor de paquetes:
Tras la instalación, la biblioteca de desarrollo
libsqlite3-devde la base de datos SQLite garantiza que podamos usar SQLite con normalidad en C++.
2. Crear la estructura del proyecto¶
Dividiremos el código en varios módulos para mantener una arquitectura clara:
- folder_size.h / folder_size.cpp: se encargan de calcular recursivamente el tamaño del directorio y sus subdirectorios.
- database.h / database.cpp: encapsulan la lógica de las operaciones con la base de datos SQLite.
- main.cpp: entrada del programa principal, encargada del control del flujo general.
La estructura de directorios del proyecto es la siguiente:
3. Implementación del código¶
A continuación implementaremos cada módulo paso a paso.
3.1 Módulo de cálculo de directorios¶
C++17 ofrece la biblioteca std::filesystem para recorrer directorios de forma recursiva y calcular tamaños. Por eso su implementación central es la siguiente:
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());
}
}
Si quieres calcular el directorio raíz, basta con calcularlo una vez más.
3.2 Operaciones con la base de datos SQLite¶
Incluir:
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. Compilar y ejecutar¶
Compilar el proyecto es muy sencillo:
Después, ejecuta el programa para calcular el tamaño del directorio y almacenarlo en la base de datos:
El programa calculará recursivamente el tamaño del directorio indicado y guardará el resultado en la base de datos folder_sizes.db.
5. Consultar la base de datos¶
Por último, puedes consultar el contenido de la base de datos mediante la herramienta de línea de comandos de SQLite:
Esto mostrará todos los directorios guardados y su tamaño correspondiente.
Fin de esta sección
Temas relacionados¶
- Implementando C++ FnOnce a mano | C++那些事
- Pequeño proyecto gRPC en C++ | C++那些事
- Comunicación entre procesos en C++ en la práctica | C++那些事
- Demo de servicio de URL cortas en C++ | C++那些事
- Pruebas de rendimiento con Google Benchmark | C++那些事
- Servidor HTTP con corrutinas de C++20 | C++那些事
- Serialización ZeroCopy con Protobuf | C++那些事
- Acelerar Python con pybind11 | C++那些事
- Diseño de una calculadora de pila en C++ | C++那些事