【发布时间】:2017-04-14 13:21:44
【问题描述】:
我需要遍历一个目录 data 并读取每个满足特定条件的文件,在一个字符串中并对其进行处理。由于某种原因,它在fseek 调用后失败(输出只是目录中第一个文件的名称)。
知道我做错了什么吗?
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
void doAlgorithm(char *input) {
printf("%s\n", input);
}
int main(int argc, char** argv) {
struct dirent *dir;
DIR *d = opendir("data");
FILE *file;
while ((dir = readdir(d)) != NULL) {
if (strlen(dir->d_name) > 6 && dir->d_name[6] == 'i') {
printf("Filename: %s\n", dir->d_name);
file = fopen(dir->d_name, "r");
fseek(file, 0, SEEK_END);
long length = ftell(file);
fseek(file, 0, SEEK_SET);
printf(", Filesize: %ld\n", length);
char *buffer = malloc(length + 1);
fread(buffer, 1, length, file);
buffer[length] = '\0';
fclose(file);
doAlgorithm(buffer);
}
}
closedir(d);
return (EXIT_SUCCESS);
}
【问题讨论】:
-
ftell返回一个longint 太小 -
您也未能在各处检查返回值。仅仅因为你要求
length字节并不意味着你得到了它们。 -
好的,我解决了这个问题,但它仍然没有改变任何东西,在 fseek() 调用之后程序仍然无法正常工作。顺便说一句,如果重要的话,我会在 Windows 上运行它。
-
问题是 fseek 调用出现问题,如果我尝试打印 fseek 或 ftell 返回值,它不会打印任何内容
-