获取文件大小之前最好先读一下这个文件
Windows下用stat函数得到的文件size可能不准
下面这段测试代码用于在TEMP目录下创建一个文件,然后随便写入一点数据
char* tempdir=getenv("TEMP");
std::ostringstream oss;
oss<<tempdir<<"\\1.txt";
std::string filename=oss.str();
FILE* f=fopen(filename.c_str(),"wb");
char buf[]="abcdfdfdf";
fwrite(buf,1,sizeof(buf),f);
fflush(f);
Sleep(10000000);
fclose(f);如果你有VC,可以编译试一下。运行这段代码,然后开一个命令行窗口,用dir命令获取这个文件的大小。
D:\Users\cm>dir %TEMP%\1.txt
在我机器上(Windows 7 64bit),每次的测试结果都是发现这个文件的大小是0。如果你自己写一个程序,用_stat(或FindFirstFileEx)函数去拿文件大小,发现也是0。
但是,如果,此时对这个文件做一点读操作,比如用more命令查看下这个文件,然后再获取文件大小,那么就一切正常了。
发现这个问题是因为,我在用leveldb的时候,发现虽然我通过fwrite函数写了log文件,然后flush了,但是接着用_stat函数去拿文件大小的时候,文件大小是0。而碰巧,跑TESTS的目录恰好在%TEMP%目录下,否则也不会这么糟了。
解决办法:用GetFileSizeEx获取文件大小,而不是_stat。
§4321 · August 15, 2012 · C/C++ · · [Print]
--------------------------------------------------------------------------------
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:snnn 来源: snnn的blog
- 标签: stat
- 发布时间:2012-08-17 13:21:30
-
[917] WordPress插件开发 -- 在插件使用 -
[135] 解决 nginx 反向代理网页首尾出现神秘字 -
[54] 整理了一份招PHP高级工程师的面试题 -
[52] Innodb分表太多或者表分区太多,会导致内 -
[52] 海量小文件存储 -
[52] 如何保证一个程序在单台服务器上只有唯一实例( -
[51] 全站换域名时利用nginx和javascri -
[50] 用 Jquery 模拟 select -
[49] CloudSMS:免费匿名的云短信 -
[48] jQuery性能优化指南