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

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

Есть код. 

Код:

#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 думаю вполне понятно.

Если статья была полезна вам – не забывайте поделиться ею со своими друзьями в социальных сетях. Если есть вопросы – задавайте в комментариях либо в наших социальных группах.