繁体   English   中英

fstat返回0文件大小

[英]fstat Returning 0 File Size

我以为我理解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()被调用错误并影响文件。

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

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

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

  • 如果fileStat是一个结构,为什么我要使用fileStat.st_size而不是fileStat-> st_size,就像我创建自己的结构一样? 示例:myString-> characters;

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM