在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()
函數)來獲取更準確的文件類型信息。