商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > readdir如何实现跨平台目录读取

readdir如何实现跨平台目录读取

  发布于2026-07-12 阅读(0)

扫一扫,手机访问

说到跨平台目录读取,很多开发者在切换操作系统时都会遇到一个问题:readdir 在 POSIX 系统上是标准操作,可一到 Windows 就水土不服。其实解决方案很简单——用条件编译把两套 API 拆开处理。下面这段 C++ 代码就演示了如何在同一份源码里兼容 Windows 和 Unix-like 环境。

readdir如何实现跨平台目录读取

#include 
#include 

#ifdef _WIN32
    #include 
#else
    #include 
    #include 
    #include 
    #include 
#endif

void list_directory_contents(const std::string& path) {
    #ifdef _WIN32
        WIN32_FIND_DATA find_data;
        HANDLE h_find = FindFirstFile((path + "\\*").c_str(), &find_data);
        if (h_find == INVALID_HANDLE_VALUE) {
            std::cerr << "Error: Cannot open directory." << std::endl;
            return;
        }
        do {
            std::cout << find_data.cFileName << std::endl;
        } while (FindNextFile(h_find, &find_data) != 0);
        FindClose(h_find);
    #else
        DIR* dir = opendir(path.c_str());
        if (dir == nullptr) {
            std::cerr << "Error: Cannot open directory." << std::endl;
            return;
        }
        struct dirent* entry;
        while ((entry = readdir(dir)) != nullptr) {
            std::cout << entry->d_name << std::endl;
        }
        closedir(dir);
    #endif
}

int main() {
    std::string path = "."; // 当前目录
    list_directory_contents(path);
    return 0;
}

这里的核心函数 list_directory_contents 接受一个路径字符串,然后根据编译目标平台选择不同的底层实现。在 Windows 上,借助 FindFirstFileFindNextFile 遍历目录;在其他平台,则直接用 opendirreaddir。两种分支都做了错误处理——如果目录打不开,会输出错误信息并直接返回,避免空指针或死循环。

编译时要注意工具链的选择:Windows 下推荐 Visual Studio 或者 MinGW(支持 Windows API 的编译器),Linux/macOS 上直接用 GCC 或 Clang 就行,CMake 也能自动处理平台宏。话说回来,这其实只是一个最基础的封装,实际项目中可能还需要过滤掉 ...,或者支持递归遍历,但套路是一样的——预处理宏是跨平台编程的保底方案。

本文转载于:https://www.yisu.com/ask/10254618.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注