これは私の最初のapprouchで、fread()
とfwrite()
の機能です。だから私は彼らに対処する方法を学んでいます。テキストファイルの場合、私はaを読み込んで別の関数でファイルを作成することに成功しました。しかし、テキスト以外のファイルで試してみると、破損して出力されるだけです。私はインターネット上でこの問題を検索するのに成功した結果がないので、ここで尋ねています。非テキストファイルを正しくfread()およびfwrite()するには?
要約:サーバで開いたファイルからクライアントにデータ収集を送信していて、クライアントがデータを解析して正確なファイルを作成しようとしています。
だから、私は、このやっている方法を説明してみましょう:
FILE* myfile = fopen(fullPath.c_str(), "rb");
は、その後、私は、ファイルを読み返すためにループを作成します: を私はバイナリモードでの非テキストファイルを開く(I「が何らかの理由今、私は(私は破損の問題は、バッファのコンバージョンであるかどうかわからないのですsucessfulyクライアントで文字列を解析しています
int readPos = 0;
std::string externalBuffer;
while (true) {
unsigned char buffer[1024];
int bytesRead = 0;
bytesRead += fread(buffer, sizeof(unsigned char), 1024, upfile);
if (bytesRead == 0)
break;
externalBuffer = unsigned_char_to_string(buffer, bytesRead); //This simple function loops over the buff and converts each entry to the string -> the results are numbers from 0-255
//Here I convert the buffer to a string and send it to the client to be parsed and add to a string buffer like: dataChunk += parsedString;
//clear buffers
}
)非テキストファイルの実際のサイズがsize/4
に等しいことが判明しまし文字列に)。 ループからのすべてのデータが送信された後。クライアントは、バッファdataChunkを使用して、その後の書き込みをしようとします:
FILE* myfile = fopen(fullPath.c_str(), "wb+");
fwrite(dataChunk.c_str(), sizeof(char), dataChunk.size(), myfile);
fclose(myfile);
私はすでにその16進数に0〜255の各エントリを変換して、新しいファイルへの書き込み、16進文字列に送信されたデータを変換しようとしました。また、dataChunk
文字列をunsigned char
配列に変換しようとしました。しかし、すべての私の試みは、破損したファイルにつながった。私は、このメソッドを使用して、実行可能ファイルとpngイメージを作成しようとしました。 私はまた、fopen
のいくつかの例を見て、すべてのファイルを一度にコピーしてから、fwrite
を同じ関数で新しい関数で作成しました。
このコードでは何が問題なのですか、完璧なファイルが出力されないのはなぜですか? fread()
とfwrite()
を間違って使用していますか?
「彼らは単に破損している」とはどういう意味ですか? – immibis
なぜC++のクラスではなく、C++プログラムで 'stdio'関数を使用していますか? – Barmar
@immibisファイルは実行されません。それはサイズを持っていません。私はそうだと思います。 – Xabirau