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

时间:2021-04-17 09:27:33
fstream打开一个流之后,每次写了文件后,
size_t size = fs.tellp();
来取文件的大小。。。
但有时候。。这个size的值特别大。。
是为什么啊?
tellp()返回了一个pos_type,不能直接转成size_t么?

6 个解决方案

#1


感觉你的做法有点不对,我是这么做的,肯定能取到值,而且是对的。

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

#2


楼上这种间接转和我直接转成size_t,有什么区别么?
貌似一样啊。。
我现在就是很多情况下看是正常的。。。但有时得到一个特别大的值。
搞不清原因啊。。。

#3


tellg() 和 tellp() 代表当前get 流指针的位置 (用tellg) 或 put 流指针的位置(用tellp).
long l,m;
l = f.tellp();
f.seekg(0,ios::end);
m = f.tellp();
这样明白吗

#4


引用 2 楼 nanbazhangbiao 的回复:
楼上这种间接转和我直接转成size_t,有什么区别么?
貌似一样啊。。
我现在就是很多情况下看是正常的。。。但有时得到一个特别大的值。
搞不清原因啊。。。

因为你指针的位置貌似不对吧……所以要先做一个指针位置的设置

#5


我调试了一下。。。发现是tellp返回了-1,
然后我强制转换成了无符号的size_t,导致很大了。。
现在是不知道为啥会返回-1了。。。

#6


http://www.cplusplus.com/reference/ostream/ostream/tellp/
http://baike.baidu.com/view/4209782.htm

#1


感觉你的做法有点不对,我是这么做的,肯定能取到值,而且是对的。

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

#2


楼上这种间接转和我直接转成size_t,有什么区别么?
貌似一样啊。。
我现在就是很多情况下看是正常的。。。但有时得到一个特别大的值。
搞不清原因啊。。。

#3


tellg() 和 tellp() 代表当前get 流指针的位置 (用tellg) 或 put 流指针的位置(用tellp).
long l,m;
l = f.tellp();
f.seekg(0,ios::end);
m = f.tellp();
这样明白吗

#4


引用 2 楼 nanbazhangbiao 的回复:
楼上这种间接转和我直接转成size_t,有什么区别么?
貌似一样啊。。
我现在就是很多情况下看是正常的。。。但有时得到一个特别大的值。
搞不清原因啊。。。

因为你指针的位置貌似不对吧……所以要先做一个指针位置的设置

#5


我调试了一下。。。发现是tellp返回了-1,
然后我强制转换成了无符号的size_t,导致很大了。。
现在是不知道为啥会返回-1了。。。

#6


http://www.cplusplus.com/reference/ostream/ostream/tellp/
http://baike.baidu.com/view/4209782.htm