ifstream的seekg无法读取2G以后的文件咋整?

Swanzy 2010-09-28 02:00:51
经过测试,下面代码无法读取2G以后的文件内容,请问如何替代?
查MSDN,http://msdn.microsoft.com/en-us/library/75yw9bf3(v=VS.80).aspx
但没看明白怎么代替下面方法,惭愧~,请指点

请大虾给个替代方法,谢谢!

ifstream fin(FILENAME,ios::binary);
offset = ... ...为指针位置,指向二进制文件2G以后的位置
fin.seekg(offset);
fin.read((char*)(&结构体),sizeof(结构体大小));


...全文
509 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Swanzy 2010-09-29
  • 打赏
  • 举报
回复
还有人指点么?谢谢!
Swanzy 2010-09-28
  • 打赏
  • 举报
回复
sMOBILE FileHandler::find(int no)
{
sMOBILE S;
//rb - 以只读形式打开二进制文件
FILE* fin = fopen(FILENAME,"rb");
__int64 offset = sizeof(S)*(no-1);
//SEEK_SET:从文件头开始
_fseeki64(fin,offset,SEEK_SET);
fread(&S,1,sizeof(lticket),fin);
fclose(fin);
return S;
}

FILENAME是6G的文件,上面的代码刚好读到4G的地方。
Swanzy 2010-09-28
  • 打赏
  • 举报
回复
楼上的GG,我刚试过,又杯具了,到了4G以上又不能读了... ...
hastings 2010-09-28
  • 打赏
  • 举报
回复
用C里面的FILE*看:
fopen;
int fseek(
FILE *stream,
long offset,
int origin
);
int _fseeki64(
FILE *stream,
__int64 offset,
int origin
);
fread;
fclose;
Swanzy 2010-09-28
  • 打赏
  • 举报
回复
晕,可惜没看明白... ...
我现在的查找方法如下,2G以下的文件没有问题,可现在该如何修改啊?

sMOBILE FileHandler::find(int no)
{
sMOBILE S;
ifstream fin(FILENAME,ios::binary);

//计算指针位置
//unsigned long offset = sizeof(lticket)*(no-1);
//设置读位置
fin.seekg(offset);
fin.read((char*)(&S),sizeof(S));
fin.close();
return S;
}
taodm 2010-09-28
  • 打赏
  • 举报
回复
换gcc编译器试。
hastings 2010-09-28
  • 打赏
  • 举报
回复
....7楼~~
ayw215 2010-09-28
  • 打赏
  • 举报
回复
Swanzy 2010-09-28
  • 打赏
  • 举报
回复
非常感谢楼上滴!俺来好好学习一下~,谢谢先啦!
Swanzy 2010-09-28
  • 打赏
  • 举报
回复
那就是说不能用ifstream这个类来读取了吧
ayw215 2010-09-28
  • 打赏
  • 举报
回复
用那个64位的seek,好像是_lseeki64
Swanzy 2010-09-28
  • 打赏
  • 举报
回复
VS2005
taodm 2010-09-28
  • 打赏
  • 举报
回复
编译器版本?VC6就不用拿出来混了。

64,648

社区成员

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

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