谁能告诉我为什么下面的代码不起作用?我正在为 Zip 流使用 SharpZipLib API,这是今天从他们的网站上下载的最新版本。我试图使用这种逻辑将一个 zip 文件的内容合并到另一个中,而不必在磁盘上执行 IO,因为预期的 zip 文件可能包含为 windows 保留的文件名。我已经尝试过使用多个不同的源和目标 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) { }
}
}