ifstream java_使用ifstream :: seekg和tellg获取文件大小

ifstream java_使用ifstream :: seekg和tellg获取文件大小当我尝试获取文件大小时,我有以下块来测试seekg和tellg的行为:intsize=0;ifstreamin(fileName.c_str(),ifstream::in|ifstream::binary);if(in){in.seekg(0,ifstream::end);size=in.tellg();cout<<endl;cout<<endl;…

大家好,又见面了,我是你们的朋友全栈君。

当我尝试获取文件大小时,我有以下块来测试seekg和tellg的行为:

int size = 0;

ifstream in(fileName.c_str(), ifstream::in | ifstream::binary);

if(in)

{

in.seekg(0,ifstream::end);

size = in.tellg();

cout << endl;

cout << endl;

cout << “********** size stream1*** =” << size << endl;

in.seekg(0,ios::end);

size = in.tellg();

cout << “********** size stream2*** =” << size << endl;

in.seekg(0,ios::end);

size = in.tellg();

cout << “********** size stream3*** =” << size << endl;

in.seekg(100,ios::end);

size = in.tellg();

cout << “********** size stream4*** =” << size << endl;

in.seekg(0,ios::beg);

size = in.tellg();

cout << “********** size stream5*** =” << size << endl;

in.seekg(100);

in.seekg(0, ios::end);

size = in.tellg();

cout << “********** size stream6*** =” << size << endl;

in.seekg(100);

in.seekg(0, ios::cur);

size = in.tellg();

cout << “********** size stream7*** =” << size << endl;

in.seekg(-100,ios::end);

size = in.tellg();

cout << “********** size stream8*** =” << size << endl;

in.seekg(ios::beg,ios::end);

size = in.tellg();

cout << “********** size stream9*** =” << size << endl;

in.seekg(ios::beg);

in.seekg(ios::end);

size = in.tellg();

cout << “********** size stream10*** =” << size << endl;

cout << endl;

cout << endl;

}

其结果如下:

********** size stream1*** =1846

********** size stream2*** =1846

********** size stream3*** =1846

********** size stream4*** =1946

********** size stream5*** =0

********** size stream6*** =1846

********** size stream7*** =100

********** size stream8*** =1746

********** size stream9*** =1846

********** size stream10*** =2

我的问题如下:

tellg 会返回最后 seekg 找到的字节吗?

为什么 stream5 结果为0?它以前的位置是在文件的末尾 .

seekg 将始终从文件的开头开始,如 stream5 所示?

seekg 无法向后退,如 stream5 所示?

seekg的第一个参数究竟是什么意思?它表示它是第二个参数的偏移量 . 如果它是一个正值,它似乎超出了第二个参数指向的位置,如 stream4 所示 .

如果我想知道前100个字节后的大小,我必须使用-100,如 stream8 所示?

为什么 stream10 是2?

ofstream中

seekp 和 tellp 的属性为 seekg 和 tellg ?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145945.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • svn配置忽略文件

    svn配置忽略文件1、添加忽略项项目根目录,找到SVN->右键->属性新建,其它->选择svn:ignore输入要忽略的内容确定即可。2、全局忽略配置svn->右键->设置即可

    2022年9月13日
    0
  • 用java代码实现九九乘法表

    用java代码实现九九乘法表分析乘法表发现,整体有九行,第一行是一列,第二行是两列,第三行三列…..第九行对应有九列,所以它的行数对应就有多少列,这样我们可以通过借助行数来控制它的列数,以此来实现乘法表的打印。具体代码实现:for循环publicclassMultTable{ publicstaticvoidmain(String[]args){ //此处调用九九乘法表方法实现打印 multMethod(); } publicstaticvoidmultMethod(){ /

    2022年7月9日
    20
  • 爬虫(2)之re 爬取淘宝网「建议收藏」

    爬虫(2)之re 爬取淘宝网「建议收藏」我们通过requests可以很轻松地就获得网页上的所有内容,但是这些内容往往会夹杂着许多我们不需要的东西,因此我们需要解析和提取HTML数据。在先前介绍过的解析和提取html内容的库,只能够处理静态文本执行简单的搜索,缺乏灵活性,不能处理动态的文本信息。下面来介绍一下正则表达式。什么是正则表达式?正则表达式是用来简洁表达一组字符串的表达式正则表达式是一种通用的字符串表达框架正则表…

    2022年6月18日
    33
  • Android Studio入门级教程(详细)【小白必看】[通俗易懂]

    Android Studio入门级教程(详细)【小白必看】[通俗易懂]AndroidStudio如何使用之前的文章已经讲解了AndroidStudio的安装和配置过程请参考:本文主要讲解一下AndroidStudio使用方法步骤:1.建立项目首先点击new——newproject新建项目选择想要创建的Android的模板,建议选择emptyactivity(空模板),然后nextName:给你的项目起一个名字API…

    2022年5月29日
    45
  • fvwm配置_nvme ngff

    fvwm配置_nvme ngff  习惯了Gnome与KDE的生活,是不是有时候也觉得太过于繁琐?花了几天时间,终于配置好了我的FVWM………… 正如王垠博士说的那样   无比强大!!!!!体验了  自己操控电脑的感觉啊还是那句话,在Linux的世界里,我就是上帝!有需求的人,我们一起探讨一下配置哈! 下面贴我的配置文件:####添加图标路径##########ImagePath/hom

    2022年10月3日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号