首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C/C++ 跨平台目錄遍歷:C++17 std::filesystem 終極指南

     編輯:程式設計綜合問答

現狀

C/C++ 標準庫在 C++17 前**無標準目錄操作**,Windows 用 FindFirstFile/FindNextFile,POSIX 用 opendir/readdir,需自行封裝或用第三方庫。

C++17 標準解法

#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';
                }
            }
        }
    }
}

編譯器支援

  • GCC 8+:-std=c++17 -lstdc++fs(GCC 9+ 無需額外連結)。
  • Clang 7+:-std=c++17 -lc++fs。
  • MSVC 19.1+ (VS2017 15.7+):/std:c++17 內建支援。

C++14/11 替代方案

  • Boost.Filesystem:#include <boost/filesystem.hpp>,API 與 std::filesystem 高度一致,成熟穩定。
  • POCO::File/DirectoryIterator、Qt QDirIterator(若專案已依賴該框架)。

結論:C++17 專案直接用 std::filesystem,舊標準專案引入 Boost.Filesystem,避免重複造輪子。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved