fstream中的流操作,取文件大小

nanbazhangbiao 2013-04-22 02:01:25
fstream打开一个流之后,每次写了文件后,
size_t size = fs.tellp();
来取文件的大小。。。
但有时候。。这个size的值特别大。。
是为什么啊?
tellp()返回了一个pos_type,不能直接转成size_t么?
...全文
442 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
byxbai1989 2013-04-22
  • 打赏
  • 举报
回复
http://www.cplusplus.com/reference/ostream/ostream/tellp/ http://baike.baidu.com/view/4209782.htm
nanbazhangbiao 2013-04-22
  • 打赏
  • 举报
回复
我调试了一下。。。发现是tellp返回了-1, 然后我强制转换成了无符号的size_t,导致很大了。。 现在是不知道为啥会返回-1了。。。
KudoRan 2013-04-22
  • 打赏
  • 举报
回复
引用 2 楼 nanbazhangbiao 的回复:
楼上这种间接转和我直接转成size_t,有什么区别么? 貌似一样啊。。 我现在就是很多情况下看是正常的。。。但有时得到一个特别大的值。 搞不清原因啊。。。
因为你指针的位置貌似不对吧……所以要先做一个指针位置的设置
lilianjie001 2013-04-22
  • 打赏
  • 举报
回复
tellg() 和 tellp() 代表当前get 流指针的位置 (用tellg) 或 put 流指针的位置(用tellp). long l,m; l = f.tellp(); f.seekg(0,ios::end); m = f.tellp(); 这样明白吗
nanbazhangbiao 2013-04-22
  • 打赏
  • 举报
回复
楼上这种间接转和我直接转成size_t,有什么区别么? 貌似一样啊。。 我现在就是很多情况下看是正常的。。。但有时得到一个特别大的值。 搞不清原因啊。。。
KudoRan 2013-04-22
  • 打赏
  • 举报
回复
感觉你的做法有点不对,我是这么做的,肯定能取到值,而且是对的。

fs.seekg(0, std::ios::end);
std::ios::pos_type ss = fs.tellg();
int nFilesize = (int)ss;

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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