Определение размера fstream открытого с флагом ios::binary

194
11 мая 2018, 14:26

Есть .txt файл, необходимо считать его размеры, после этого побайтно переписать данные. Соответственно необходимо знать первоначальный размер файла. Пробовал через метод отсюда через tellg - получал -1, далее попробовал метод отсюда используя gcount - получал 0. Первый метод работает если добавить флаг app при открытии. Есть ещё какие-нибудь способы кроме как проход по файлу циклом?

Добавил проверку, при наличии флага binary ошибка:

void itsg06(std::string path)
{
    std::fstream file(path, std::ios::binary);
    if( !file.good() )
        std::cout << "\nErr\n";
    else
    { 
        for( std::string line; std::getline( file, line ); )
        {
            std::cout << line << '\n';
        }
    }
    file.close();
}
Answer 1

Открываете файл с флагом ios::ate, который установит позицию потока в конец файла. Далее уже с помощью функции tellg получаете размер файла

fstream file( "example.txt", ios::binary | ios::ate);
return file.tellg();

Если функция tellg вернула -1, значит вызов функции завершился с ошибкой.

READ ALSO
Вызвано исключение по адресу 0x008A53A1 в ConsoleApplication45.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xCDCDCDCD

Вызвано исключение по адресу 0x008A53A1 в ConsoleApplication45.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xCDCDCDCD

arr[0] - неинициализированный указатель, содержащий мусор*arr[0] - это применение оператора * к неинициализированному указателю

221
Вывод UTF-8 в cmd

Вывод UTF-8 в cmd

В нижеприведённом коде в строку responseString приходит слово состоящее из кириллических символов в кодировке UTF-8При выводе в cmd с кодовой страницей...

213
C++, Симуляция работы автостоянки

C++, Симуляция работы автостоянки

Добро времени суток!

195
Как на C++ сделать запрос SMART SSD&amp;HDD?

Как на C++ сделать запрос SMART SSD&HDD?

Не могу найти примеры как через C++ сделать запрос по SMART SSD&HDD?

175