0

私は C++ を学んでいて、テキスト ファイル、画像、またはその他の zip ファイルなどのファイルを zip から抽出する小さなプログラムを作成してトレーニングすることにしました (ただし、それらを直接抽出したくはありません。一度に 1 つずつ)。 libzip ライブラリ。だから私は自分のプログラムを作りましたが、今私は問題を抱えています。テキスト ファイルは適切に抽出されますが、画像や zip などのファイルは抽出されません。それらを検出し、正確な名前とサイズを教えてくれますが、抽出すると、それらはほんの数バイトです。(しかし、それらはあるべき場所にあります)。

ここに私のコードがあります: http://pastie.org/6221955

したがって、誰かがテキストではないファイルをzipから抽出するのを手伝ってくれたら、それは素晴らしいことです! ありがとうございました!

4

2 に答える 2

2

バイナリ データをテキスト文字列として読み書きしています。問題は、文字列が NULL 文字 (0 バイト) の存在を使用して文字列の終わりを示すことです。バイナリ データには、末尾だけでなく、あらゆる場所にゼロが含まれる可能性があります (そして間違いなく含まれます)。

ディスクに書き込むにはofstream'sを使用する必要があります。.write (buffer, <size in bytes>)サイズをバイト単位で手動で指定すると、NULL 文字の最初のインスタンスで停止するのではなく、そのバイト数を強制的に読み取ることができます。

于 2013-02-19T07:38:49.400 に答える
1

問題は << 演算子にあります。文字配列/文字列を出力します。C の文字列は null で終了します。したがって、最初のバイナリ 0 で出力が終了します。

于 2013-02-19T07:39:29.527 に答える