अंतिम अद्यतन:2026-10-12
C++17 और SQLite से directory का size निकालना¶
Project practical: C++17 और SQLite से folder के size की गणना और storage¶
यह section एक project background पर चलेगा: मान लीजे business में कुछ folders का size समय-समय पर check करने की ज़रूरत है, और एक persistence operation करनी है, तो C++ यह project कैसे पूरा करेगा?
इस section में एक छोटे project के ज़रिए, C++17 और SQLite से folder के size की गणना और storage का system implement करते हैं, जिससे आप अपने file system को बेहतर ढंग से manage कर सकें।
Project लक्ष्य¶
हम निम्न functionality implement करेंगे: 1. निर्दिष्ट directory और उसके subdirectories के size की recursive गणना। 2. गणना के परिणाम SQLite database में save करना, ताकि आगे query और analysis सरल हो। 3. मज़बूत extensibility: आप project में आसानी से बदलाव करके multithreading समर्थन जोड़ सकते हैं, performance optimize कर सकते हैं, या परिणामों को किसी और database में store कर सकते हैं।
नोट: आराम पसंद करने वालों के लिए, पूरा code 星球 पर अपडेट किया जा चुका है।
Project implementation चरण¶
1. Environment¶
सबसे पहले, सुनिश्चित करें कि development environment में निम्न tools इंस्टॉल हैं: - C++17 समर्थित compiler: जैसे g++, निम्न command से version check किया जा सकता है:
सुनिश्चित करें कि g++, C++17 standard का समर्थन करता है।- SQLite3: database operations के लिए हम SQLite उपयोग करेंगे, आप package manager से इसे इंस्टॉल कर सकते हैं:
इंस्टॉल के बाद, SQLite database की development library
libsqlite3-devसुनिश्चित करती है कि हम C++ में SQLite सामान्य रूप से उपयोग कर सकें।
2. Project structure बनाना¶
हम code को कई modules में बाँटेंगे, साफ़ architecture बनाए रखते हुए:
- folder_size.h / folder_size.cpp: directory और उसके subdirectories के size की recursive गणना के लिए ज़िम्मेदार।
- database.h / database.cpp: SQLite database operations के logic को wrap करते हैं।
- main.cpp: main program entry, पूरे flow के control के लिए ज़िम्मेदार।
Project का directory structure इस प्रकार है:
3. Code implementation¶
आगे, हम हर module को एक-एक करके implement करेंगे।
3.1 Directory गणना module¶
C++17 std::filesystem library देता है, जिससे directories को recursively traverse करके size की गणना की जा सकती है। इसलिए इसका core implementation इस प्रकार है:
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());
}
}
अगर root directory का size निकालना हो, तो एक बार फिर से गणना कर दें।
3.2 SQLite database operations¶
Include करें:
उपयोग:
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. Compilation और run¶
Project compile करना बहुत सरल है:
फिर, program run करें, directory का size निकालकर database में store करें:
Program निर्दिष्ट directory के size की recursive गणना करेगा, और परिणाम folder_sizes.db database में save करेगा।
5. Database query¶
अंत में, आप इससे
SQLite command line tool से database की सामग्री query कर सकते हैं:
इससे सभी saved directories और उनके संगत sizes दिखाई देंगे।
इस section का अंत
संबंधित विषय¶
- खुद C++ FnOnce लिखना | C++那些事
- C++ gRPC छोटा project | C++那些事
- C++ inter-process communication व्यवहार | C++那些事
- C++ short URL service Demo | C++那些事
- Google Benchmark performance testing | C++那些事
- C++20 coroutine HTTP server | C++那些事
- Protobuf ZeroCopy serialization | C++那些事
- pybind11 से Python तेज़ करना | C++那些事
- C++ stack calculator design | C++那些事