将 .zip 文件解压缩到文件夹 C#

Extracting .zip file into folder C#

当我尝试创建用于将 .zip 文件提取到文件夹中的代码时遇到问题,在我向您展示代码之前,我想告诉您我需要做什么?

很简单,我想编写代码,当用户点击一个按钮时,它会删除一个目录,然后下载一个新的 .zip 文件并将其解压缩到被删除的相同目录和名称中。 . 它类似于将目录恢复为默认形式..

我成功地编写了用于删除目录和下载 .zip 文件的代码,但是我无法编写用于提取该 .zip 的代码...

这是代码

private void button2_Click(object sender, EventArgs e)
{
    // Is file downloading yet?
    if (webClient != null)
        return;

    var sprdir = new DirectoryInfo(@"cstrike/sprites");
    string sprzippath = @"cstrike/sprites.zip";
    string extzippath = @"cstrike";
    if (!sprdir.Exists)
    {
        webClient = new WebClient();
        webClient.DownloadFileAsync(new Uri("https://sipi-portfolio.000webhostapp.com/csfiledownload/sprites.zip"), @"cstrike/sprites.zip");
    }
    else
    {
        sprdir.Attributes = sprdir.Attributes & ~FileAttributes.ReadOnly;
        sprdir.Delete(true);
        webClient = new WebClient();
        webClient.DownloadFileAsync(new Uri("https://sipi-portfolio.000webhostapp.com/csfiledownload/sprites.zip"), @"cstrike/sprites.zip");
    }

}

是的,我尝试使用 System.IOSystem.IO.Compress 以及 ZipFile.ExtractToDirectoryExtractToDirectory,没有人工作...只是在文本下方画红线。 .

所以首先您需要将程序集 System.IO.Compression.FileSystem 添加到您的项目中。

第二件事是您正在使用可能尚未完成的 DownloadFileAsync,因此您的提取失败(因为尚不存在文件)

第三个是如果文件夹不存在则您不会创建该文件夹,这会导致 WebClient.DownloadFileAsync 失败。

您需要注册到 DownlodFileCompleted 事件和那里的提取。

这里有一个例子:

using System;
using System.ComponentModel;
using System.IO;
using System.Net;
using System.Windows.Forms;
using System.IO.Compression;

namespace Stack
{
    public partial class Form1 : Form
    {
        WebClient webClient;// = new WebClient();
        const string basPath = @"D:\test";

        public Form1()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            // Is file downloading yet?
            if (webClient != null)
                return;

            //var sprdir = new DirectoryInfo(@"cstrike/sprites");

            var sprdir = new DirectoryInfo(basPath);
            string sprzippath = $"{basPath}/sprites.zip";
            string extzippath = @"cstrike";
            if (!sprdir.Exists)
            {
                Directory.CreateDirectory(basPath);
                webClient = new WebClient();
                webClient.DownloadFileCompleted += ExtratcZip;
                webClient.DownloadFileAsync(
                    new Uri("https://sipi-portfolio.000webhostapp.com/csfiledownload/sprites.zip"),
                    $"{basPath}/sprites.zip");
            }
            else
            {
                sprdir.Attributes = sprdir.Attributes & ~FileAttributes.ReadOnly;
                sprdir.Delete(true);
                Directory.CreateDirectory(basPath);
                webClient = new WebClient();
                webClient.DownloadFileCompleted += ExtratcZip;
                webClient.DownloadFileAsync(
                    new Uri("https://sipi-portfolio.000webhostapp.com/csfiledownload/sprites.zip"),
                    $"{basPath}/sprites.zip");
            }
        }

        private void ExtratcZip(object sender, AsyncCompletedEventArgs e)
        {
            ZipFile.ExtractToDirectory($"{basPath}/sprites.zip", $"{basPath}");
        }
    }
}

希望对您有所帮助。