1、 使用 C 获取目录中的文件
在 C 中,最常用的方法是使用 opendir()
、readdir()
和 closedir()
函数,这些函数是 POSIX 库的一部分(在类 Unix 系统如 Linux 和 macOS 上可用)。对于 Windows,你可以使用 FindFirstFile
和 FindNextFile
等函数。
1)类 Unix 系统(Linux、macOS)
#include <stdio.h> #include <dirent.h> #include <stdlib.h> int main() { DIR *dir; struct dirent *entry; // 打开目录 dir = opendir("."); if (dir == NULL) { perror("opendir"); return 1; } // 读取目录 while ((entry = readdir(dir)) != NULL) { // 打印每个文件/目录的名称 printf("%s\n", entry->d_name); } // 关闭目录 closedir(dir); return 0; }
2)Windows系统
#include <stdio.h> #include <windows.h> int main() { WIN32_FIND_DATA findFileData; HANDLE hFind = FindFirstFile("C:\\path\\to\\your\\directory\\*", &findFileData); if (hFind == INVALID_HANDLE_VALUE) { printf("打开目录失败。\n"); return 1; } do { // 打印文件名 printf("%s\n", findFileData.cFileName); } while (FindNextFile(hFind, &findFileData) != 0); // 关闭句柄 FindClose(hFind); return 0; }
2、使用 C++ 获取目录中的文件
在 C++ 中,最直接的方式是使用 C++17 引入的文件系统库,它提供了一个简洁的接口来处理文件系统操作。
#include <iostream> #include <filesystem> namespace fs = std::filesystem; int main() { std::string path = "."; // 当前目录 // 遍历目录中的文件 for (const auto &entry : fs::directory_iterator(path)) { std::cout << entry.path() << std::endl; } return 0; }
3、使用 POSIX(类 Unix 系统)中的 C++ 代码
对于支持 POSIX 的系统,也可以像 C 一样使用 opendir()
、readdir()
和 closedir()
函数,只不过是用 C++ 编写。
#include <iostream> #include <dirent.h> #include <cstdlib> int main() { DIR *dir; struct dirent *entry; // 打开目录 dir = opendir("."); if (dir == nullptr) { perror("opendir"); return 1; } // 读取目录 while ((entry = readdir(dir)) != nullptr) { // 打印每个文件/目录的名称 std::cout << entry->d_name << std::endl; } // 关闭目录 closedir(dir); return 0; }