ファイルを圧縮して送信するファイル転送アプリケーションを作成しようとしています。私の主な目標は、再開可能な転送を提供することでした。そのために、最初にユーザーが送信する必要があるすべてのファイルのアーカイブを作成し、次にストリームでアーカイブを開き、そこからデータのチャンクを読み取りますそのチャンクを圧縮し、受信側で解凍してから、そのデータをより大きなファイルに追加します。これがメイン アーカイブになります。
GZipOutputStream gzipout = new GZipOutputStream(File.Create("abc.zip"));
//reading and compressing the chunk into abc.zip
do
{
//f is my filestream for the original archive
sourceBytes = f.Read(buffer, 0, buffer.Length);
if (sourceBytes == 0)
{
break;
}
gzipout.Write(buffer, 0, sourceBytes);
bytesread += sourceBytes;
} while (bytesread < chunklength);
bytesread = 0;
gzipout.Finish();
gzipout.Close();
//encrypting the chunk
s.EncryptFile("abc.zip","abc.enc");
//the chunk is sent over here to the receiving side
//these are the functions on the receiving side
//decrypting the chunk
s.DecryptFile("abc.enc","abc1.zip");
GZipInputStream gzipin=new GZipInputStream(File.OpenRead("abc1.zip"));
//the chunk is being decompressed and appended into the original archive file
FileStream temp = File.Open(Path.GetFileName("originalzip.zip"), FileMode.Append);
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = gzipin.Read(data, 0, data.Length);
if (size != 0)
temp.Write(data, 0, size);
else
break;
}
temp.Flush();
temp.Close();
} while (sourceBytes!=0);
ExtractAll("originalzip.zip", "testest");
問題は、アーカイブをそのまま送信すると機能するため、チャンクプロセスのどこかに問題がありますが、チャンクを作成しようとすると、受信アーカイブのサイズが大きくなり、開くことができません。
編集:修正されました。新しいチャンクを作成する前に、以前に作成したチャンクを削除し、修正しました