gpt4 book ai didi

c++ - ifstream 的问题

转载 作者:行者123 更新时间:2023-11-28 03:49:49 24 4
gpt4 key购买 nike

看看这段小代码,它打开了一个 ifstream :

std::ifstream _fcs; 

bool openFile(char* path)
{
istream::pos_type pos;
int tmp = 0;

_fcs.open(path, fstream::binary | fstream::in);

if(!_fcs.is_open())
return false;

tmp = 0;
pos = 0x404;

_fcs.seekg(0x404);
pos = _fcs.tellg(); /// return zero

_fcs >> tmp; ///
_fcs.read((char*)&tmp, 4);

return true;
}

我有两个问题。

  1. seekg 之后,tellg 返回零,当我读取数据时,它从文件开头读取。
  2. operator >> 似乎不起作用。总是返回零!

////---------------------------------------- ------
感谢您的关注。我找到了一个疯狂的解决方案,但我很困惑!如果我调用 seekg 两次,它就可以工作,请看这段代码:

 bool openFile(char* path)
{
istream::pos_type pos;
int tmp;
bool fail;

_fcs.open(path, fstream::binary | fstream::in);

if(!_fcs.is_open())
return false;

_fcs.seekg(0x402);
_fcs.seekg(0x402); /// When it comments, the tellg returns 0. am i crazy!?

fail = _fcs.fail();
assert(!fail);

pos = _fcs.tellg(); /// return 0x402!!!

/// _fcs >> tmp;
_fcs.read((char*)&tmp, 4);

return true;
}

真的,发生了什么事?
////-------------------------------------------- --

请帮帮我...
提前致谢。

最佳答案

seekg 调用之后使用 _fcs.fail() 检查 failbit 以确保您没有指定无效的文件位置。

要仔细检查尺寸,请使用

 _fcs.seekg(0,ios::end);
int length = _fcs.tellg();

您还需要使用 .read() 来获取 len 值,因为您的文件是二进制文件

关于c++ - ifstream 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5892348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com