加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – fstat返回0文件大小

发布时间:2020-12-16 09:48:03 所属栏目:百科 来源:网络整理
导读:我以为我理解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
我以为我理解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->字符;

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

上面的所有代码都是我对Googled代码的解释,并与我的试错实现混合在一起.这就是我有这么多问题的原因.

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

解决方法

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

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

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

>如果fileStat是一个结构,就像我创建自己的结构时一样?示例:myString->字符;

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读