C语言 fstat 返回 0 文件大小



我以为我理解了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,我有正确的文件名和路径。

上面的所有代码都是我对代码的解释,这些代码被谷歌搜索并与我的试错实现混合在一起。这就是为什么我有很多问题。

编辑:解决方案:open()被错误调用并影响文件。

  • 为什么我需要使用 fd = open(fileN, "r");使用fstat?感觉就像我打开文件两次。

因为fstat()需要一个文件描述符。您可以改用stat(),它采用文件名。或者,您可以使用 fd = fileno(fp) 从 stdio FILE 获取文件描述符。

顺便说一句,您需要在循环中调用close(fd)

  • 如果fileStat是一个结构体,为什么我使用fileStat.st_size而不是fileStat->st_size,就像我创建自己的结构体时所做的那样?示例:我的字符串>字符;

当左侧的变量是指向结构的指针时,您可以使用->,当它是结构本身时,您可以使用.。这是基本的 C 语法,没有特定于fstat 的语法。

  • 为什么上面的代码在执行 printf 时打印 0s?是的,文件的大小大于 0,我有正确的文件名和路径。

您没有正确调用open()。第二个参数应该是包含标志的int。由于你给出了一个字符串,所以指向字符串的指针被强制转换为一个 int,并且其中的位可能不是有效的开放标志。您需要检查 open 的返回值以查看它是否成功 - 如果出现错误,它将返回-1。与fstat类似 - 它可能返回错误,因为fd无效。

相关内容

  • 没有找到相关文章

最新更新