【问题标题】:Console Application creates empty zip files控制台应用程序创建空的 zip 文件
【发布时间】: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 应该正常关闭。

标签: c# zip


【解决方案1】:

好吧,我的代码没有问题,我在另一个地方发现了我的问题,我将文件发送到 FTP。我用的是CodeProject的sn-p,貌似作者打开文件有点小错误(方法是重新创建文件而不是打开)。

【讨论】:

    猜你喜欢
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 2013-07-09
    相关资源
    最近更新 更多