विषय पर बढ़ें

अंतिम अद्यतन: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++ --version
सुनिश्चित करें कि g++, C++17 standard का समर्थन करता है।

  • SQLite3: database operations के लिए हम SQLite उपयोग करेंगे, आप package manager से इसे इंस्टॉल कर सकते हैं:
    sudo apt-get install sqlite3 libsqlite3-dev
    
    इंस्टॉल के बाद, 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 इस प्रकार है:

project/
│── folder_size.h
│── folder_size.cpp
│── database.h
│── database.cpp
└── main.cpp

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 करें:

#include <sqlite3.h>

उपयोग:

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 करना बहुत सरल है:

mkdir build
cmake ../
make -j8

फिर, program run करें, directory का size निकालकर database में store करें:

./folder_size_calculator

Program निर्दिष्ट directory के size की recursive गणना करेगा, और परिणाम folder_sizes.db database में save करेगा।

5. Database query

अंत में, आप इससे

SQLite command line tool से database की सामग्री query कर सकते हैं:

sqlite3 folder_sizes.db
sqlite> SELECT * FROM FolderSizes;

इससे सभी saved directories और उनके संगत sizes दिखाई देंगे।

इस section का अंत

संबंधित विषय

टिप्पणियाँ