我正在尝试读取名为“dataset”的目录中的所有.txt文件。所有文本文件的名称都是1.txt,2.txt,3.txt ......然后将文件内容保存到名为FILES的结构中。
我在一些来源中使用了dirent.h库和readdir()函数。但是从目录中读取的程序的文件名不能正确返回。这是我的相关代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
typedef struct FILES{
char **words;
int wordCount;
}FILES;
void readFiles();
FILES *files;
int fileCount;
int main(){
readFiles();
return 0;
}
void readFiles(){
FILE *file;
DIR *directory;
struct dirent *filesInDirectory;
int counter;
fileCount = 1;
files = (FILES *)malloc(sizeof(FILES));
directory = opendir("dataset");
if(directory == NULL){
printf("Warning: The directory name that is given in the code is not
valid ..!");
return;
}else{
while((filesInDirectory = readdir(directory)) != NULL){
printf("%s\n", filesInDirectory->d_name);
file = fopen(filesInDirectory->d_name, "r+");
if(file == NULL){
printf("Warning: The file named %s could not open ..!",
filesInDirectory->d_name);
return;
}
files[fileCount-1].wordCount = 1;
files[fileCount-1].words = (char **)malloc(files[fileCount-
1].wordCount * sizeof(char *));
counter = 0;
while(!feof(file)){
files[fileCount-1].words[counter] = (char *)malloc(20 *
sizeof(char));
fscanf(file, "%s", files[fileCount-1].words[counter]);
files[fileCount-1].wordCount++;
files[fileCount-1].words = (char **)realloc(files[fileCount-
1].words, files[fileCount-1].wordCount * sizeof(char *));
counter++;
}
fileCount++;
fclose(file);
}
}
}
我在这里打印的文件名“printf(”%s \ n“,filesInDirectory-&gt; d_name);”是“。”。我在哪里做错了?
答案 0 :(得分:0)
这不是一个回答但是很难评论
以下是您的问题:
1
FILES
这个尺寸足够while((filesInDirectory = readdir(directory)) != NULL){
。这还不够
之后
size_t len = strlen(filesInDirectory->d_name);
if (len < 5 || strcmp(filesInDirectory->d_name + len - 4, ".txt") != 0) {
continue;
}
添加类似
的内容fstat
这将检查以确保文件以.txt结尾
考虑使用realloc
确保文件是文本文件
删除malloc
或许files
while ... feof
fscanf(file, "%s",
不好 - 请参阅上面的链接
{{1}} - 缓冲区溢出是可能的。做点什么吧。阅读手册页