在Linux中,可以使用readdir()
函数从目录中读取文件和子目录
#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
int main() {
DIR *dir;
struct dirent *entry;
const char *dir_path = "/path/to/directory"; // 替换为你要读取的目录路径
dir = opendir(dir_path);
if (dir == NULL) {
perror("Failed to open directory");
return 1;
}
while ((entry = readdir(dir)) != NULL) {
// 获取文件类型
enum {
DT_DIR, // 目录
DT_REG, // 普通文件
DT_LNK, // 符号链接
DT_SOCK, // 套接字
DT_FIFO, // 命名管道
DT_CHAR, // 字符设备
DT_BLOCK // 块设备
} type;
type = entry->d_type;
// 根据文件类型进行相应的处理
switch (type) {
case DT_DIR:
printf("Directory: %s/%s\n", dir_path, entry->d_name);
break;
case DT_REG:
printf("Regular file: %s/%s\n", dir_path, entry->d_name);
break;
case DT_LNK:
printf("Symbolic link: %s/%s\n", dir_path, entry->d_name);
break;
case DT_SOCK:
printf("Socket: %s/%s\n", dir_path, entry->d_name);
break;
case DT_FIFO:
printf("Named pipe: %s/%s\n", dir_path, entry->d_name);
break;
case DT_CHAR:
printf("Character device: %s/%s\n", dir_path, entry->d_name);
break;
case DT_BLOCK:
printf("Block device: %s/%s\n", dir_path, entry->d_name);
break;
default:
printf("Unknown type: %s/%s\n", dir_path, entry->d_name);
break;
}
}
closedir(dir);
return 0;
}
这个示例程序会打印出指定目录中所有文件和子目录的类型。注意,d_type
字段可能在某些系统上不可用,因此你可能需要使用其他方法(例如stat()
函数)来获取更准确的文件类型信息。