2

TCPClientを使用してリモートコンピューターとのネットワーク接続を確立するプログラムを作成しました。これを使用して、ファイルを100kチャンクでリモート.netアプリケーションに転送し、次にそれらをハードドライブに書き込みます。ZIP ファイルを除いて、すべてのファイル転送は正常に機能します。再構築されたファイルは常に 98K であることに注意してください...ZIP ファイルには、この方法での処理を妨げる暗い秘密があります。ここでも、画像、xls、txt、chm、exe など、他のすべてのファイル転送は正常に機能します。

混乱している

4

3 に答える 3

3

コードを示していないので、何が問題なのかを正確に言うのはちょっと難しいです。

よくある間違いは、 Stream.Readは、読み取り量が少ない可能性があることを認識せずに、要求されたすべてのデータを読み取り、実際に読み取った量が戻り値であると想定することです。

つまり、コードは次のようであってはなりません。

byte[] buffer = new byte[input.Length];
input.Read(buffer, 0, buffer.Length);
output.Write(buffer, 0, buffer.Length);

しかし、次のようなもの:

byte[] buffer = new byte[32 * 1024];
int bytesRead;
while ( (bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
    output.Write(buffer, 0, bytesRead);
}

しかし、それは単なる推測です。いくつかのコードを投稿していただければ、それを理解する可能性が高くなります.

于 2009-01-11T23:48:48.953 に答える
1

実際のコードは役に立ちます。

BinaryReader / BinaryWriter を使用していますか?

(つまり、テキストベースではなくデータベース)。

16 進ファイルの比較 (例: Beyond Compare ) を使用して、元のファイルとコピーを比較し、手がかりが得られるかどうかを確認できます。

于 2009-01-12T00:23:54.297 に答える
0

受信した各チャンクで既存のファイルを (追加ではなく) 上書きしている可能性がありますか? したがって、ファイルの最終的なサイズは <= 1 つのチャンクのサイズになります。

しかし、コードがなければ、問題の原因を特定するのは困難です。

于 2009-01-11T23:47:25.213 に答える