遇到一个问题,http请求,下载图片,保存到本地,打不开,进行分析。内容如下
保存文件代码
void CMainPresenter::save_downloadGameIco_big(const QString &filename, const QByteArray &data)
{
const QString &filepath = m_fileNormalPath;
QFile file(filepath);
if (!file.open(QIODevice::WriteOnly))
return;
QDataStream out(&file);
out<<data;
file.close();
}
总会在前面多出来四个字节。
不同文件,不一样,同样文件,一样。
就想着难道是存了什么文件大小之类的东西?
一算,果然,存的是字节size。
那就看操作符是咋重载的呗,进调试,会走writeBytes函数。源码一看就明白了,会先写大小到头。
所以直接用 writeRawData即可。
Qt源码:
QDataStream &QDataStream::writeBytes(const char *s, uint len)
{
CHECK_STREAM_WRITE_PRECOND(*this)
*this << (quint32)len; // write length specifier
if (len)
writeRawData(s, len);
return *this;
}
int QDataStream::writeRawData(const char *s, int len)
{
CHECK_STREAM_WRITE_PRECOND(-1)
int ret = dev->write(s, len);
if (ret != len)
q_status = WriteFailed;
return ret;
}
最终代码
QDataStream out(&file);
out.writeRawData(data,data.size()); //这样头部就不会多出来四个字节了
file.close();