【问题标题】:How to zip files/directories in VB.NET?如何在 VB.NET 中压缩文件/目录?
【发布时间】:2015-05-05 03:34:49
【问题描述】:

我想在 VB.NET 中压缩一个包含文件和子文件夹的文件夹。我的解决方案针对 .NET 4.0 客户端配置文件。

我看到 .NET 4.5 有一个 ZipFile 类,.NET 4.0 有一个 System.IO.Packing(但没有客户端配置文件)。所以,这些都没用。我注意到还有一个 GZipStream 类,但我从来没有看到 .gz 文件漂浮在周围,所以不确定这是否是一个好方法。我更喜欢我知道我的用户可以使用的基本 .zip 文件。

有一些第三方解决方案,例如 http://icsharpcode.github.io/SharpZipLib/,但我认为它们比我正在寻找的 10-20 行代码要臃肿得多。也许这是正确的答案……我不知道。

只希望几行 VB.NET 代码将一些文件压缩到针对 .NET 4.0 CP 的解决方案中。

【问题讨论】:

  • 呃,为什么投反对票?这不是一个有效的问题,还是来自在提交答案之前显然没有阅读问题的贡献者的报复?

标签: c# .net vb.net zip


【解决方案1】:

从“源”文件夹创建 ZIP。

Imports System.IO.Compression    
ZipFile.CreateFromDirectory("source","destination.zip",CompressionLevel.Optimal,False)

将 ZIP 解压到“目标”文件夹。

ZipFile.ExtractToDirectory("destination.zip","destination")

【讨论】:

  • 这应该是示例代码还是一组指令?无论哪种方式,您都应该在答案中添加更多细节,解释正在发生的事情以及为什么需要这样做,并花时间使用 SO 的 Markdown 变体正确格式化您的答案。
  • 有没有办法提供不同的路径例如:C:\ 驱动器中的源和 D:\ 驱动器中的目标。我尝试了很多。它给了我一个错误,说不能更改根文件夹。是否有解决方法来浏览我想要压缩文件的目的地(包括从 C:\ 到 D:\ 或 E:\ 等不同驱动器,就像任何用户选择一样)
【解决方案2】:

MSDN 网站上有一个可以帮助您的课程,称为ZipFile

using System;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication {
  class Program {
    static void Main(string[] args) {
      string startPath = @"c:\example\start";
      string zipPath = @"c:\example\result.zip";
      string extractPath = @"c:\example\extract";
      'Creates Zip File to directory as specified (startPath). And puts it in a specifed folder (zipPath)
            ZipFile.CreateFromDirectory(startPath, zipPath);
              '
      Extracts Zip File to directory as specified(extractpath)
      ZipFile.ExtractToDirectory(zipPath, extractPath);
    }
  }
}

希望这会有所帮助!

【讨论】:

    【解决方案3】:

    由于缺乏声誉(由于是新来的),无法在 cmets 部分发表评论。

    关于表明 using System.IO.Compression 可以使用的两个答案,这些答案被评论为在 NET 4.0 CP 中不起作用,应该注意这一点,因为原始答案不包括经常被忽视的事实。

    需要将引用添加到项目中才能激活“System.IO.Compression”。这对许多新的 VS 用户来说并不明显,除非添加引用,否则“System.IO.Compression”似乎在 NET 4.0 中不起作用。

    在这种情况下,需要添加的引用是System.IO.Compression.Filesystem (v4.0.0.0)。还可以添加参考:System.IO.Compression

    “添加引用...”对话框位于 VS 的“项目”菜单下。

    【讨论】:

      【解决方案4】:

      只需使用 Ionic.Zip.Dll 即可完成

      这里是这个函数,接受两个变量源路径和目标路径

      public static void ExecuteBackupAsZip(string SourcePath, string DestinationPath)
              {
                  using (var zip = new Ionic.Zip.ZipFile())
                  {
                      try
                      {
                          zip.AddDirectory(SourcePath);
                          zip.Save(DestinationPath);
                      }
                      catch { Console.WriteLine("Failed to execute backup"); }
                  }
              }
      

      【讨论】:

      • 我不认为我会从这样一个看起来不道德的网站下载东西。如果你有VB.NET中DLL的源码,请分享。
      【解决方案5】:

      与“奇怪的客人”相同的挑战。由于作为新用户的代表较低,因此无法发表评论,并且必须添加新答案。 (虽然是经常阅读的人)。在 vb.Net 4.6 上运行,上面的建议没有错误,但没有生成输出 zip 文件。然后在谷歌搜索后添加了参考 System.IO.Compression.FilesystemSystem.IO.Compression 并最终得到以下单行:

      System.IO.Compression.ZipFile.CreateFromDirectory(FilePath1, FilePath3_ZippedFile)
      

      其中 FilePath1 是源文件夹 (c:\whateverfolder) 的路径,FilePath3_ZippedFile 是生成的输出 zip 文件 (c:\anotherfolder\MyZipFile.zip) 的路径。

      很抱歉,如果您认为我的意见是多余的,但我知道对于像我这样的新人,我们需要用三通勺来提供答案。

      注意事项:如果您尝试在源文件夹中创建 zip 文件,您可能会遇到问题。然后,我的代码仅包含 zip 文件中源文件夹中的一个文件。 (没有错误消息)。将目标位置更改为另一个文件夹即可解决此问题,无需对代码进行其他编辑。

      【讨论】:

      • 有没有办法提供不同的路径例如:C:\ 驱动器中的源和 D:\ 驱动器中的目标。我尝试了很多。它给了我一个错误,说不能更改根文件夹。是否有解决方法来浏览我想要压缩文件的目的地(包括从 C:\ 到 D:\ 或 E:\ 等不同驱动器,就像任何用户选择一样)
      猜你喜欢
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      相关资源
      最近更新 更多