Re: std::ifstream, MSVC 2012, бага?
От: PM  
Дата: 15.02.15 18:33
Оценка:
Здравствуйте, nen777w, Вы писали:

[код поскипан]

Теоретически, использование stream.tellg() — это непереносимый способ узнать размер файла. Так как tellg() возвращает лишь некое положение в потоке данных, которое в дальнейшем может быть использовано чтобы вернуться к этому положению.

Единственный способ узнать размер потока в С++ используя IOStreams — это прочитать весь поток до конца, проигнорировав все данные и потом узнать кол-во прочитанных байт:
file.ignore( std::numeric_limits<std::streamsize>::max() );
std::streamsize length = file.gcount();
file.clear();   //  Since ignore will have set eof.
file.seekg( 0, std::ios_base::beg );


Источник: http://stackoverflow.com/a/22986486/1355844

Самый надежный вариант — использовать API целевой платформы, ну или boost::filesystem для большинства распространенных платформ.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.