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.

751   2  

2 ответов:

Я уже вставил это в комментарий, но я думаю, что это также Ответ:

STL в VS2005 не поддерживает смещения больше 2147483647 (~2 ГБ), поэтому поиск или указание позиции за пределами этого не работает и объясняет отрицательные значения. (см. здесь)

(Также tellg() возвращает -1, когда есть ошибка, но я предполагаю, что вы видите другие отрицательные значения)

Решение состоит в том, чтобы использовать более новый компилятор (VS2010) или использовать альтернативную реализацию STL, такую как STLPort

Вот грязное VS2010-совместимое решение:

__int64 size = *(__int64*) ( ((char*)&(infile.tellg())) +8)

Comments

    Ничего не найдено.