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->字符; 为什么执行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无效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |