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