我以为我理解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,我有正确的文件名和路径。
上面的所有代码都是我对Googled代码的解释,并与我的试错实现混合在一起。这就是我有这么多问题的原因。
编辑:解决方案:open()被调用错误并影响文件。
答案 0 :(得分:7)
因为fstat()
需要文件描述符。您可以使用stat()
代替文件名。或者您可以使用fd = fileno(fp)
从stdio FILE
获取文件描述符。
顺便说一下,你需要在循环中调用close(fd)
。
当左侧的变量是指向结构的指针时,使用->
,当它是结构本身时,使用.
。这是基本的C语法,没有特定于fstat
。
您没有正确调用open()
。第二个参数应该是包含标志的int
。因为你给了一个字符串,所以指向字符串的指针被强制转换为int,并且这里的位可能不是有效的打开标志。您需要检查open
的返回值以查看它是否成功 - 如果出现错误,它将返回-1
。与fstat
类似 - 它可能会返回错误,因为fd
无效。