Проблема с ifstream - PullRequest
       4

Проблема с ifstream

0 голосов
/ 05 мая 2011

Посмотрите на этот маленький код, он открывает 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. после поиска, TellG возвращает ноль, и когда я читаю данные, он читает с начала файла.
  2. оператор >> кажется, не работает. всегда возвращайте ноль!

//// ------------------------------------------- -----
спасибо за внимание. Я нашел сумасшедшее решение, но я запутался! если я вызываю 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;
}

действительно, что случилось?
//// ---------------------------------------------- -

пожалуйста, помогите мне ...
заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

Проверьте бит сбоя с помощью _fcs.fail() после вызова seekg, чтобы убедиться, что вы не указали неверную позицию файла.

Для двойной проверки размера используйте

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

Вам также нужно использовать .read(), чтобы получить значение len, так как ваш файл является двоичным

0 голосов
/ 05 мая 2011

В двоичном режиме >> не должен работать, вы должны использовать ostream :: write.

Ваш файл действительно существует и имеет размер?если заметить, вы не можете «переместиться» в произвольную точку в пустом файле.

...