我有一个类项目来用 C++ 创建一个网络服务器。一切都很顺利,直到我需要托管图像或 pdf 文件,此时文件已损坏。进行更多挖掘后,我意识到所有损坏的图像在结束之前都有空字符。
这让我想到了我的问题。我有一个 char* ,我已将这些文件读入其中,并且我知道文件的长度。我很肯定正在读取整个文件(下面的代码),但我不知道如何打印或发送它。如何告诉 C++ 我想发送 char* 之后的前 X 个字符?(我确定答案在这里或网络上的某个地方,我似乎无法以正确的方式表达我的问题以找到答案)
ifstream myfile (path.c_str() , ios::in|ios::binary|ios::ate);
ifstream::pos_type size = myfile.tellg();
cout << size << endl;
fileSize = (int) size;
fileToReturn = new char [size];
myfile.seekg (0, ios::beg);
myfile.read (fileToReturn, size);
myfile.close();
cout << "file read\n"<< fileToReturn << endl;
对于纯文本文件,这将输出正常。对于 PDF,它只打印文件的第一部分(第一个空字符之前的部分)。如何让它打印出整个文件?
编辑:澄清一下,我的最终目标是通过网络发送,而不是重新保存文件。
// reply is string with all my headers and everything set.
// fileToReturn is my char*, and fileSize is the int with how long it should be
char* totalReply = new char [reply.length() + fileSize+1];
strcpy(totalReply, reply.c_str());
strcat(totalReply, fileToReturn);
send(client, totalReply, reply.length() + fileSize, 0);