tellg () возвращает отрицательный ответ
Я открыл файл в двоичном режиме, и выполнение следующих операций дает отрицательное значение x. размер файла, который я открыл, составляет ~2,5 ГБ.
infile.seekg(0, ios::end);
__int64 x = infile.tellg();
Мне нужно было infile читать байты (беззнаковые символы), поэтому я определил его как uifstream, выполнив:
typedef basic_ifstream<unsigned char, std::char_traits<unsigned char> > uifstream;
, который в основном является стандартным ifstream, но с unsigned chars вместо chars.
EDIT: я использую Visual Studio 2005 и исправил uofstream на uifstream.
2 ответов:
Я уже вставил это в комментарий, но я думаю, что это также Ответ:
STL в VS2005 не поддерживает смещения больше 2147483647 (~2 ГБ), поэтому поиск или указание позиции за пределами этого не работает и объясняет отрицательные значения. (см. здесь)
(Также
tellg()возвращает -1, когда есть ошибка, но я предполагаю, что вы видите другие отрицательные значения)Решение состоит в том, чтобы использовать более новый компилятор (VS2010) или использовать альтернативную реализацию STL, такую как STLPort
Comments