C/C++ 標準庫在 C++17 前**無標準目錄操作**,Windows 用 FindFirstFile/FindNextFile,POSIX 用 opendir/readdir,需自行封裝或用第三方庫。
#include <filesystem>
namespace fs = std::filesystem;
void scan_cpp_files(const fs::path& root) {
for (auto& entry : fs::recursive_directory_iterator(root)) {
if (entry.is_regular_file() && entry.path().extension() == ".cpp") {
// 處理 .cpp 檔案:entry.path() 為完整路徑
std::ifstream in(entry.path());
std::string line;
int lineNo = 0;
while (std::getline(in, line)) {
++lineNo;
if (line.find("target_keyword") != std::string::npos) {
std::cout << entry.path() << ":" << lineNo << ": " << line << '\n';
}
}
}
}
}
-std=c++17 -lstdc++fs(GCC 9+ 無需額外連結)。-std=c++17 -lc++fs。/std:c++17 內建支援。#include <boost/filesystem.hpp>,API 與 std::filesystem 高度一致,成熟穩定。結論:C++17 專案直接用 std::filesystem,舊標準專案引入 Boost.Filesystem,避免重複造輪子。