Решение системных задач для предприятий малого бизнеса.

Игры от YuWik

Вопрос по файловым потокам в С++

Константин аватар

Вопрос по файловым потокам в С++ - Есть код.

Код:
#include "stdafx.h"
#include <fstream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
        ifstream in("111.jpg", ios::in|ios::binary);
        ofstream out("222.jpg", ios::out|ios::binary);
       
        in.seekg(ios::end);
        int iSize = (int)in.tellg();
       
        char* buffer = new char[iSize+1];
       
        in.clear();
        in.read(buffer, iSize);
       
        out.write(buffer, iSize);
       
        out.close();
        in.close();
        delete [] buffer;
       
        return 0;
}

В результате выполнения программы мы получаем выходной файл 222.jpg размеров в 2 байта. Собственно, вся проблема заключается в том, что в результате этого кода мы получаем неверный размер файла.

Код:
int iSize = (int)in.tellg();
В чем проблема я понять так и не могу... Может быть что то подскажите?
Аналогичный код, написанный на С, работает не вызывая нареканий.
[Сайт программистов Codenet.ru. Новые темы на форуме]
Причиной подобного поведения является, то что необходимо или же устанавливать абсолютную позицию в файле - это делает вызов функции

in.seekg(100);//100 символов от начала

либо надо устанавливать позицию относительно начала или конца файла

in.seekg(0,ios::end);//В конец файла

Передача указателя на конец файла по сути тоже самое как:

in.seekg(4);

результат предсказуем. почему именно 4 думаю вполне понятно.