简短结论:readdir 本身不能“跨平台”直接保证行为一致,但它是 POSIX 标准接口,在 CentOS(Linux)以及大多数类 Unix 系统上可用;在 Windows 上不属于原生 API,需要兼容层或替代实现。
下面分点说明:
readdir 是什么readdir 是 POSIX 标准 定义的目录读取函数#include <dirent.h>
opendir()
readdir()
closedir()
CentOS(Linux)天然支持。
✅ 支持(基本一致)
❌ 不直接支持
readdir)dirent.hFindFirstFile()
FindNextFile()
需要自己封装成类似 readdir 的逻辑
boost::filesystem / std::filesystem(C++17)Qt(QDir)GLib / POCO 等即使都是 POSIX,也可能有差别:
struct dirent 字段不完全一致
d_type(Linux 有,某些系统没有)#ifdef _WIN32
// Windows 实现
#else
// readdir 实现
#endif
#include <filesystem>
namespace fs = std::filesystem;
✅ Windows / Linux / macOS 完全一致
readdir 完全可用std::filesystem 或封装兼容层如果你愿意,可以告诉我:
我可以给你一份可直接用的跨平台目录遍历代码。