C语言读取文件目录下的所有文件的名称存入数组
时间: 2024-09-11 21:01:25 浏览: 60
在C语言中,你可以使用`dirent.h`头文件中提供的`DIR`和`struct dirent`结构体,以及`opendir()`, `readdir()`和`closedir()`这几个函数来读取文件目录下的所有文件名称,并将它们存入数组。以下是一个简单的示例程序,用于说明如何实现这一功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
int main() {
DIR *d;
struct dirent *dir;
char **fileNames;
int count = 0;
int arraySize = 10; // 假设我们初始分配10个位置的数组
fileNames = malloc(arraySize * sizeof(char*));
d = opendir("."); // 打开当前目录
if (d) {
while ((dir = readdir(d)) != NULL) {
// 不读取当前目录"."和父目录".."
if (strcmp(dir->d_name, ".") == 0 || strcmp(dir->d_name, "..") == 0)
continue;
// 如果数组空间不足,进行扩展
if (count >= arraySize) {
arraySize *= 2;
fileNames = realloc(fileNames, arraySize * sizeof(char*));
}
// 分配内存给每个文件名
fileNames[count] = malloc(strlen(dir->d_name) + 1);
strcpy(fileNames[count], dir->d_name);
count++;
}
closedir(d);
}
// 输出所有文件名
for (int i = 0; i < count; i++) {
printf("%s\n", fileNames[i]);
free(fileNames[i]); // 释放每个文件名所占用的内存
}
free(fileNames); // 释放整个文件名数组的内存
return 0;
}
```
这段代码首先尝试打开当前目录(`.`表示当前目录),然后循环使用`readdir()`函数读取目录中的每一项,跳过特殊的目录项"."和".."。每读取到一个文件名,就将其存储在动态分配的字符串数组`fileNames`中。如果数组空间不足以存储更多文件名,则对数组进行扩展。
在实际使用中,你需要检查`opendir()`, `readdir()`和`malloc()`等函数的返回值,以确保它们成功执行,特别是在内存分配和目录打开时可能会失败。
阅读全文