【问题标题】:QByteArray is adding 4 extra bytes when outputting to a file输出到文件时,QByteArray 增加了 4 个额外字节
【发布时间】:2021-03-16 19:51:48
【问题描述】:

我正在处理 OpenRGB 的自动更新,但最近它(Qt)开始向原始文件添加额外的字节

我正在下载文件

QByteArray OpenRGBUpdateInfoPage::GetPageSourceOrFile(QString link)
{
    QEventLoop GetPageSourceOrFile;
    QNetworkAccessManager Manager;
    QNetworkRequest RequestSourceOrFile((QUrl(link)));
    QNetworkReply *Reply = Manager.get(RequestSourceOrFile);
    connect(Reply, &QNetworkReply::finished, &GetPageSourceOrFile, &QEventLoop::quit);
    GetPageSourceOrFile.exec();
    QByteArray ReturnInput = Reply->readAll();
    //GetPageSourceOrFile.deleteLater();

    return ReturnInput;
}

    QFile ORGBfile(FileStorageLocation);
    ORGBfile.open(QIODevice::WriteOnly);
    QDataStream out(&ORGBfile);
    out << AppBuffer;
    ORGBfile.close();

用于写入文件

由于某种原因,这个问题只发生在 linux 上

https://gitlab.com/herosilas12/OpenRGB/-/tree/auto-update 是仓库

【问题讨论】:

  • 额外的 4 个字节是什么?
  • 文件是否比QByteArray 大4 个字节,还是QByteArray 有4 个额外字节?
  • 您似乎正在使用QDataStream 将文件内容编码为QByteArray。如果是这种情况,那么您还必须使用QDataStreamdecode
  • 解码什么? QByteArray?如果它以前工作得很好,为什么还要让它工作?
  • AppBuffer 是什么? QDataStream 不像 std::ostream:一般来说,它使用额外的元数据对写入它的数据类型进行编码,这些元数据将在随后解码流时使用。因此,如果您编写 QByteArray 它可能会以例如类型 ID 和字节大小为前缀。话虽如此,如果你能提供一个更完整的代码示例会更好——最好是minimal reproducible example

标签: c++ qt https qbytearray


【解决方案1】:

原来QFile.write() 起作用了。

AppBufferWas 是下载的 appimage 文件(在说明中我提到我正在为 OpenRGB 进行自动更新)

问题是 QDataStream 在前面添加了一个大小标头

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 2012-11-15
    相关资源
    最近更新 更多