如何移动二进制文件中的位置指针

attop 2009-09-20 12:17:35

infile01.open("result01",ios::binary);
assert(infile01);


然后读取了一些数据后,想把文件指针返回开始处,我用

infile01.seekg(ios_base::beg);


但是并没有达到效果,指针根本没有移动

为什么?

如何把指针返回开始处?

先在此谢过
...全文
276 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
thy38 2009-09-20
  • 打赏
  • 举报
回复
写全点吧,防止LZ不好调试:

#include <iostream>
#include <vector>
#include <string>
#include <fstream>

using namespace std;

int main()
{
string str;
ofstream out("result01", ios_base::binary);
out << "result01";
out.close();

ifstream in("result01", ios_base::binary);
in >> str; //可以读出
cout << "1--" << str << endl;

str = "";
in >> str; //没东西可读
cout << "2--" << str << endl;

in.clear();
in.seekg(0, ios_base::beg);
str = "";
in >> str; //又可以读出
cout << "3--" << str << endl;

in.close();
}
thy38 2009-09-20
  • 打赏
  • 举报
回复
调用一下clear()

#include <iostream>
#include <vector>
#include <string>
#include <fstream>

using namespace std;

int main()
{
string str;
ifstream in("result01", ios_base::binary);
in >> str;
cout << "1--" << str << endl;

str = "";
in >> str;
cout << "2--" << str << endl;

in.clear();
in.seekg(0, ios_base::beg);
str = "";
in >> str;
cout << "3--" << str << endl;

in.close();
}
cattycat 2009-09-20
  • 打赏
  • 举报
回复
re!还是多试试了。
老邓 2009-09-20
  • 打赏
  • 举报
回复
  和C的文件操作方式不同的是,C++ I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是seekg()和seekp()。seekg()是设置读位置, seekp是设置写位置。它们最通用的形式如下:
    istream &seekg(streamoff offset,seek_dir origin);
    ostream &seekp(streamoff offset,seek_dir origin);
  streamoff定义于 iostream.h 中,定义有偏移量 offset 所能取得的最大值,seek_dir 表示移动的基准位置,是一个有以下值的枚举:
ios::beg:  文件开头
ios::cur:  文件当前位置
ios::end:  文件结尾
  这两个函数一般用于二进制文件,因为文本文件会因为系统对字符的解释而可能与预想的值不同。例:
   
file1.seekg(1234,ios::cur); //把文件的读指针从当前位置向后移1234个字节
file2.seekp(1234,ios::beg); //把文件的写指针从文件开头向后移1234个字节
老邓 2009-09-20
  • 打赏
  • 举报
回复
改用:seekp试试
attop 2009-09-20
  • 打赏
  • 举报
回复
我用
infile01.seekg(0,ios_base::beg);

也没有用
myhder 2009-09-20
  • 打赏
  • 举报
回复
在VC6.0下seekp和seekg是联动的吧。
即修改其中任一个,另一个也同样被修改!!
不知道是不是编译器的原因。

64,686

社区成员

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

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