简短结论:readdir 本身是 POSIX 标准接口,在“类 Unix 系统”之间基本可移植,但并不是严格意义上的“全平台跨平台”(尤其在 Windows 上不原生支持)。
下面分点说明:
readdir 是什么标准readdir 定义在 POSIX.1 标准中在这些系统上:
#include <dirent.h>
DIR *dir = opendir(".");
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
是可移植的。
Windows 不原生提供 readdir:
FindFirstFileFindNextFile_findfirst_findnext✅ 常见跨平台方案
readdir 兼容层boost::filesystemstd::filesystem(C++17)GLibQt QDir#include <filesystem>
for (auto& p : std::filesystem::directory_iterator(".")) {
std::cout << p.path() << '\n';
}
readdir| 平台 | 是否原生支持 readdir |
|---|---|
| Linux | ✅ |
| macOS | ✅ |
| BSD | ✅ |
| Windows | ❌(需兼容层或替代 API) |
结论:
readdir 是“Unix 跨平台”,不是“所有 OS 跨平台”std::filesystem 或封装库如果你是在写 C 还是 C++、是否需要 Windows 支持,我可以给你更具体的示例。