Чтение двоичного файла

341
29 января 2017, 14:03

есть файл fbx binarу. пытался считать с помощью ifstream но он считывает до определенного символа и дальше не читает файл(примерно 10 - 12 символ)

string line;
ifstream myfile("C:/Users/wARTEMw/Desktop/object/Blender_Binary.fbx");
if (myfile.is_open())
{
    while (myfile.good())
    {
        getline(myfile, line);
        cout << line;
    }
    myfile.close();
}

Answer 1

Нужно при открытии указать что файл должен читаться в бинарном режиме. Для этого используйте второй параметр конструктора:

ifstream myfile(
    "C:/Users/wARTEMw/Desktop/object/Blender_Binary.fbx",
    ifstream::in | ifstream::binary
);
Answer 2
std::ifstream fs("C:/Users/wARTEMw/Desktop/object/Blender_Binary.fbx", std::ios::in | std::ios::binary );
// Узнаём размер файла
fs.seekg( 0, std::ios::end );
std::size_t size = fs.tellg();
fs.seekg( 0, std::ios::beg );
// Читаем файл целиком
std::unique_ptr <char[]> buf;
buf.reset( new char[size] );
fs.read( buf.get(), size );
/*
либо без std::unique_ptr
char* buf = new char[size];
fs.read( buf, size );
и нужно не забыть освободить память delete []buf;
*/

когда нужно вывести все символы нужно учитывать что на вывод будут идти управляющие символы, то есть если попадётся '\0' то вывод прекратится

по этому если нужно вывести на экран или в файл содержимое, необходимо как то обозначить эти символы (на подобии как в Notepad++)

// примерно так
for( int i = 0; i < size; ++i ){
    if( buf[ i ] == '\0' ) printf( "[NUL]" );
    else if( buf[ i ] == '\1' ) printf( "[SOH]" );
    else if( buf[ i ] == '\2' ) printf( "[STX]" );
    else if( buf[ i ] == '\3' ) printf( "[ETX]" );
    else if( buf[ i ] == '\4' ) printf( "[EOT]" );
    else if( buf[ i ] == '\5' ) printf( "[ENQ]" );
    else if( buf[ i ] == '\6' ) printf( "[ACK]" );
    else if( buf[ i ] == '\7' ) printf( "[BEL]" );
    else if( buf[ i ] == '\n' ) printf( "\n" );
    else printf( "%c", buf[i] );
}
READ ALSO
Qt. Реализация гаджета рабочего стола

Qt. Реализация гаджета рабочего стола

Возник вопрос, возможно ли реализовать такую программу что бы:

466
FBX binary как обработать? [требует правки]

FBX binary как обработать? [требует правки]

есть FBX файлхотел написать загрузчик но не знаю что делать

466
Минималистичная IDE для C++

Минималистичная IDE для C++

Нужна простая, красивая и минималистичная IDE ( редактор с плагинами (?)) для Windows

362
Условие в триггере mysql

Условие в триггере mysql

Подскажите пожалуйста, делаю триггер

388