【发布时间】:2016-08-25 17:42:38
【问题描述】:
不知何故,我的控制台应用程序在运行时创建了空的(0 字节)Zip 文件。但是如果我设置断点,用F10遍历打包函数,zip就正常创建了。
这种行为在两台计算机上是一样的,我已经尝试过使用 DotNetZip 和 SharpZipLib 进行压缩,但没有效果。
压缩函数(使用System.IO.Packaging)如下:
private static void CreateModVersionZip(string path, string zipname)
{
using (Package zip = System.IO.Packaging.Package.Open(zipname, FileMode.OpenOrCreate))
{
string destFilename = ".\\mods\\" + Path.GetFileName(path);
Uri uri = PackUriHelper.CreatePartUri(new Uri(destFilename, UriKind.Relative));
if (zip.PartExists(uri))
{
zip.DeletePart(uri);
}
PackagePart part = zip.CreatePart(uri, "", CompressionOption.Normal);
using (FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
using (Stream dest = part.GetStream())
{
CopyStream(fileStream, dest);
}
}
}
}
如何让它正常工作?
如果您需要,我可以为 SharpZipLib 和 DotNetZip 提供 zipping sn-ps。
【问题讨论】:
-
您是否要压缩文件或目录?
-
CopyStream到底是做什么的?流是否被刷新? -
@ConnorWright 我正在尝试压缩 .jar 文件
-
@ArgusMagnus CopyStream 只是将所有字节从一个流复制到另一个流,如您所见,存在
using约束,因此Stream应该正常关闭。