1

ファイルを共有に分割するアルゴリズムの実装に取り​​組んでおり、共有の数があります。ファイルサイズに残りがある場合(共有数によるモジュラスの後)、ゼロでパディングしています。今のところ、文字列でこれを行おうとしていますが、それらを再結合する必要がある場合は、余分なパディングを追加します。ファイルと同じですか?それとも、パディングゼロはファイルの内容を変更しませんか?

それが変化した場合、どのゼロがパディングゼロであるかを知る方法はありますか?

ありがとう!

4

1 に答える 1

1

はい、ファイルに何かを追加すると、その内容が変更されます。場合によっては、これはあまり問題にならないかもしれませんが、汎用ソリューションの場合、これに頼るべきではありません。

あなたの特定のケースでは、ファイルをパディングすることは悪い考えです。

すべてのファイル部分が収まる必要がある固定ブロック サイズがある場合、追加されたバイト数を示すバイトをファイル部分に埋め込むことができます。たとえば、パディングとして 7 バイトを追加した場合、すべてのパディング バイトは 0x07 になります。後でパーツを再結合するとき、プログラムは最初にパディングを取り除かなければなりません。与えられた例では、パーツの最後のバイト、つまり 0x07 を読み取り、ファイルの末尾から 7 バイトを削除する必要があると結論付けます。

このアプローチには 2 つの問題があります。

  • 達成できる最大パディングは 0xff = 255 バイトです
  • パディングが必要ない場合は、プログラムがパディング バイトと元のコンテンツを区別できないため、ダミー パディングの完全なブロックを追加する必要があります。ファイル部分が 0x01 で終了し、パディングが不要な場合、結合プログラムはセグメントから最後のバイトを削除し、それによってファイルが破損します。

楽しみのためにこれを行っている場合は、splitBSD または GNU/Linux で見つけることができるプログラムのソース コードを見ることができます。ヒント: パディングは必要ありません。

于 2012-04-19T06:34:48.390 に答える