【问题标题】:Extracting .zip file into folder C#将 .zip 文件提取到文件夹 C#
【发布时间】:2020-04-04 08:58:57
【问题描述】:

当我尝试创建用于将 .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.CompressZipFile.ExtractToDirectoryExtractToDirectory,没有人在工作...只需在文本下方添加红线..

【问题讨论】:

  • 这能回答你的问题吗? How to extract ZIP file in C#
  • 我尝试使用 System.IO 和 System.IO.Compress 和 ZipFile.ExtractToDirectory,你的代码在哪里?
  • 我试过你发送的内容,我删除了代码 bcs 不起作用..

标签: c# visual-studio-2017


【解决方案1】:

所以首先您需要将程序集 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}");
        }
    }
}

希望对你有帮助。

【讨论】:

  • 我会试试的,我会发消息给你的,谢谢你:)
  • 又是同样的错误... prnt.sc/rsg4jh , prnt.sc/rsg50x
  • 您需要将程序集添加到您的项目中。
  • 啊,我忘了,谢谢,现在没有红线,我现在去测试:) TY
  • 我认为问题在于您没有创建 sprites 目录,并且 DownloadFileAsync 不会为您自动创建它。下载前请确保目标文件夹存在。
猜你喜欢
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
相关资源
最近更新 更多