【发布时间】:2013-10-11 22:45:05
【问题描述】:
我以为我理解了 fstat,我错了。
我需要知道文件的大小然后从文件中读取。
fileN 有文件路径和文件名。它看起来像这样。 0.txt
struct stat fileStat;
FILE *fp;
int fd = 0;
int i;
for(i = 0; i < 100; i++)
{
fp = fopen(fileN, "r");
fd = open(fileN, "r"); // I think this is eating my files and making them 0 size.
fstat(fd, $fileStat);
printf("%d", fileStat.st_size);
fclose(fp);
}
为什么我需要使用fd = open(fileN, "r"); 来使用fstat?感觉好像打开了两次文件。
如果 fileStat 是一个结构,为什么我要使用 fileStat.st_size 而不是 fileStat->st_size,就像我在创建自己的结构时那样?示例:myString->characters;
为什么上面的代码在执行printf 时会打印0?是的,文件的大小大于 0,我的文件名和路径正确。
以上所有代码都是我对在 Google 上搜索并与我的试验和错误实现混合的代码的解释。这就是为什么我有这么多问题。
编辑:解决方案:open() 被调用错误并影响文件。
【问题讨论】:
-
需要查看fopen、open和fstat的返回值。此外,未正确调用 open()。
-
如何检查 fopen 的返回值。 if(fp == NULL) 返回 -1;?
-
这是一种方式。通常使用 printf 表示 fopen 失败。