VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 309|回复: 5

ofstream 里的read不能够正确读出

[复制链接]
89_avatar_middle
最佳答案
0 
在线会员 发表于 2022-7-24 12:17:02 | 显示全部楼层 |阅读模式
我本来是想着试下用write和read来写入文件,用write写入的数据中,在记事本里显示为一个问号。用read读取时不能够正确的读取数值,反而是一个偏大的数值,请问是什么原因?

这个是输出

这个是输出

前面两个写入的数值输出时正常,但是用read读取第三行时不能够正确读出

前面两个写入的数值输出时正常,但是用read读取第三行时不能够正确读出




上一篇:SSH连接不到电脑怎么解决???
下一篇:请问想做一个股票交易记录的程序在windows安装的需要学什么
17_avatar_middle
最佳答案
35 
在线会员 发表于 2022-7-28 14:08:58 | 显示全部楼层
本帖最后由 yoobaby 于 2022-7-28 14:56 编辑

看注释,解释并不是很严谨,但基本意思差不多。
  1.         ofstream ofs;
  2.         ofs.open("T:\\fs.txt");

  3.         if (!ofs) return 0;

  4.         int iOut = 9000;
  5.         ofs << iOut << endl;
  6.         ofs << iOut + 1 << endl;
  7.                
  8.         iOut = 3000;
  9.         ofs.write((const char*)&iOut, sizeof(iOut));

  10.         ofs.close();



  11.         ifstream ifs;
  12.         ifs.open("T:\\fs.txt");

  13.         if (!ifs) return 0;
  14.         int iIn = 0;

  15.         ifs >> iIn;
  16.         cout << ifs.tellg() << endl;
  17.         cout << "var22 first " << iIn << endl;

  18.         ifs >> iIn;
  19.         cout << ifs.tellg() << endl;
  20.         cout << "var22 second " << iIn << endl;

  21.         iIn = 0;
  22.         cout << ifs.tellg() << endl;

  23.         /*
  24.         * 第一次 >> tellg() 位置到第4字节,
  25.         * 第二次 >> 会跳过第一行的换行符endl (/r/n) 两个字节,从读6个字节读取4个字节;此时teelg() 位置是10
  26.         * 注:/t 空格 之类的空白符好像也会跳过,自行测试;没去深究!
  27.         * read时,读取是从10开始读的,会读取/r/n;所以跳过2个字节。再读才会是正确的!
  28.         * 你也可以 ofs << iOut + 1 << endl; 这边不要<<endl,就不需要跳过了!
  29.         */
  30.         ifs.seekg(2, ifs.cur);
  31.        
  32.         ifs.read((char*)&iIn, sizeof(iIn));
  33.         cout << ifs.tellg() << endl;


  34.         cout << "var22 third " << iIn << endl;

  35.         ifs.close();
复制代码
65_avatar_middle
最佳答案
0 
在线会员 发表于 2022-7-25 21:18:36 | 显示全部楼层
直接read(var22)
89_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2022-7-26 23:02:27 | 显示全部楼层
我试了一下不可以,他var22是int类型的,他read的第一个参数要char*,必须要强转
89_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2022-7-26 23:03:53 | 显示全部楼层

我试了一下不可以,他var22是int类型的,他read的第一个参数要char*,必须要强转
65_avatar_middle
最佳答案
0 
在线会员 发表于 2022-7-29 23:23:56 | 显示全部楼层
哒哒哒滴答 发表于 2022-7-26 23:03
我试了一下不可以,他var22是int类型的,他read的第一个参数要char*,必须要强转

int wz=ifs.tellg();
ifs.seekg(wz+2);
ifs.read((char*)&var22,sizeoF(int));
位置问题.
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2022-8-15 11:32

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表