stat返回成功,但获取的值为0

BruceLin2008 2012-12-26 03:30:06

struct stat fpStat = {0};
if(stat("/test/test.cfg", &fpStat) < 0)//该文件大小5600字节
return -1;
perror("Error:");
printf("=========Size:%d==\n", fpStat.st_size);


fpStat.st_size的值一直为0
stat函数返回的是成功的。

但如果我执行读写操作后,再用上面方法,就可以得到正确值。

如下:

int ret;
if((fp = fopen(SYS_FILE, "rb")) == NULL){
printf("=====File:%s is not exist===\n", SYS_FILE);
ret = FAIL;
} else {
if(fread(Buffer, 1, SYS_ENV_SIZE,fp) != SYS_ENV_SIZE){
printf("=====File:%s read(%d)===\n", SYS_ENV_SIZE);
ret = FAIL;
} else {
ret = SUCCESS;
}
fclose(fp);
}
...全文
626 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kickxxx 2012-12-27
  • 打赏
  • 举报
回复
之所以读写文件后就可以,是因为fclose做了刷新,而不是读写起了作用。
kickxxx 2012-12-27
  • 打赏
  • 举报
回复
楼主你给的信息太少,别人无法判断 我给你举个例子,就会出现你说的这种情况: 1. 使用fopen打开这个文件 2. 使用fwrite写这个文件 5600字节 3. 使用stat读取文件的尺寸 在非常有可能取到错误的文件尺寸,这是因为fopen fwrite fread系列使用了c库自己的缓冲,执行后,并不一定立刻执行对应的write或者read函数
mymtom 2012-12-27
  • 打赏
  • 举报
回复
stat 的 st_size类型为off_t, 楼主可以试试这个 printf("=========Size:%d==\n", (int)fpStat.st_size);

23,216

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧