次のコードが機能しない理由を誰か教えてもらえますか? 私は Zip ストリームに SharpZipLib API を使用しています。最新バージョンは、今日サイトから DL されています。意図したzipファイルにはWindows用に予約されたファイル名が含まれている可能性があるため、このロジックを使用して、ディスクでIOを実行することなく、あるzipファイルの内容を別のzipファイルにマージしようとしています。複数の異なるソースと宛先の zip ファイル (予約済みの名前を含むものと含まないもの) でこれを試しました。コードは例外をスローしません。各書き込み操作の前にバッファーを検査すると、実際のデータが含まれていることがわかりますが、操作全体が終了した後、ターゲットの zip ファイルのサイズは変更されていないため、調べることができます。新しいファイル (コードが追加するはずのファイル) が実際に宛先ファイルに追加されていないことを確認します。:(
public static void CopyToZip(string inArchive, string outArchive)
{
ZipOutputStream outStream = null;
ZipInputStream inStream = null;
try
{
outStream = new ZipOutputStream(File.OpenWrite(outArchive));
outStream.IsStreamOwner = false;
inStream = new ZipInputStream(File.OpenRead(inArchive));
ZipEntry currentEntry = inStream.GetNextEntry();
while (currentEntry != null)
{
byte[] buffer = new byte[1024];
ZipEntry newEntry = new ZipEntry(currentEntry.Name);
newEntry.Size = currentEntry.Size;
newEntry.DateTime = currentEntry.DateTime;
outStream.PutNextEntry(newEntry);
int size = 0;
while ((size = inStream.Read(buffer, 0, buffer.Length)) > 0)
{
outStream.Write(buffer, 0, size);
}
outStream.CloseEntry();
currentEntry = inStream.GetNextEntry();
}
outStream.IsStreamOwner = true;
}
catch (Exception e)
{
throw e;
}
finally
{
try { outStream.Close(); }
catch (Exception ignore) { }
try { inStream.Close(); }
catch (Exception ignore) { }
}
}