C++でWebサーバーを作成するためのクラスプロジェクトがあります。画像やPDFをホストする必要があり、その時点でファイルが破損するまで、すべてが順調に進んでいます。さらに掘り下げてみると、破損したすべての画像の最後までにヌル文字が含まれていることがわかりました。
それは私の質問に私をもたらします。これらのファイルを読み取ったchar*があり、ファイルの長さを知っています。ファイル全体が読み込まれていることは確かですが(以下のコード)、印刷または送信する方法がわかりません。char*に続く最初のX文字を送信したいことをC++に伝えるにはどうすればよいですか?(答えはここかウェブのどこかにあると確信しています。答えを見つけるための正しい方法で私の質問を表現することができないようです)
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の場合、ファイルの最初の部分(最初のヌル文字の前の部分)のみを印刷します。ファイル全体を印刷するにはどうすればよいですか?
編集:明確にするために、私の最終目標は、ファイルを再保存するのではなく、これをWeb経由で送信することです。
// 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);