我几乎在这里失去理智;)
我正在开发一个使用 gsoap 的服务。我想回复一个哑剧回复。我一切正常,但是在读取二进制文件时,所有类型的文件(如 jpeg、pdf 等)都包含\0
数次超过数据的字符(如果用记事本打开可以看到很多NUL
)。
因此,一旦找到文件结尾字符,任何用于读取原始文件的代码都会惨遭失败。我已尝试替换,\0
但文件显示不正确。
我还尝试了几种方法,包括 gsoap 附带的示例。
于是重新开始,
fstream 通用代码不起作用。
for (i = 0; i < MAX_FILE_SIZE; i++)
{ if ((c = fgetc(fd)) == EOF)
break;
image.__ptr[i] = c;
}
也不起作用
QFile::ReadAll
有效,但是在转换QString
为char*
数组时会在第一个NUL
.
那么,读取整个二进制文件的最佳方法是什么?有时 C++ 是多么疯狂。
提前致谢。
我已经按照 retnick 的建议尝试了这个
UrlToPdf urlToPdf;
urlToPdf.getUrl(&input, &result);
QByteArray raw = urlToPdf.getPdf(QString(result.data.c_str()));
int size = raw.toBase64().size();
char* arraydata = new char[size];
strcpy(arraydata, raw.toBase64().data());
soap_set_mime(this, "MIME_boundary", NULL);
if(soap_set_mime_attachment(this, arraydata, size, SOAP_MIME_BASE64, "application/pdf", NULL, NULL, NULL))
{
soap_clr_mime(this);
soapMessage = this->error;
}
但没有运气... mime 响应比实际文件大...
大卫·G·奥尔特加