Распаковка .zip файла в папку C# - PullRequest
0 голосов
/ 03 апреля 2020

У меня проблема, когда я пытаюсь создать код для извлечения 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.IO и System.IO.Compress и ZipFile.ExtractToDirectory и ExtractToDirectory, никто не работает ... Просто получите красную линию под текстом ..

1 Ответ

1 голос
/ 03 апреля 2020

Итак, во-первых, вам нужно добавить сборку System.IO.Compression.FileSystem в ваши проекты.

Во-вторых, вы используете DownloadFileAsyn c, который, вероятно, еще не завершен, поэтому ваше извлечение завершается неудачно (поскольку файл еще не существует)

В-третьих, вы не создаете папку, если она не существует, и это приводит к сбою WebClient.DownloadFileAsyn c.

вам необходимо зарегистрироваться на событие где 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}");
        }
    }
}

надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...