Как я могу прочитать двоичный файл в protobuf, который имеет тип QString? - PullRequest
0 голосов
/ 03 апреля 2020

Итак, у меня есть двоичный файл, и его имя передается в мою функцию как const QString& filename, и я пытаюсь прочитать его в ProtoBuf. Я пробовал пример ParseFromArray(file.data(), file.size()), но он не работает и имеет размер 1.

Как правильно это сделать? Спасибо!

Вот мой фрагмент кода:

bool open(const QString& filename)
{
    myProject::protobuf::Example _example;

    // need to copy contents from file to _example
}

1 Ответ

0 голосов
/ 03 апреля 2020

Вам необходимо сначала открыть файл, используя QFile, а затем прочитать его содержимое, используя его унаследованный метод readAll(), который вернет QByteArray. Затем используйте QByteArray::data() и QByteArray::size(), чтобы перейти к ParseFromArray(const void* data, int size). Вы также должны позаботиться об обработке ошибок, где это необходимо.

Вот пример:

bool open( const QString& filename )
{
    QFile file { filename };
    if ( !file.open( QIODevice::ReadOnly ) ) return false;

    const auto data = file.readAll();
    if ( data.isEmpty() ) return false;

    if ( !ParseFromArray( data.data(), data.size() ) ) return false;

    // successful parsing: process here...

    return true;
}
...