将 .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.IO
和 System.IO.Compress
以及 ZipFile.ExtractToDirectory
和 ExtractToDirectory
,没有人工作...只是在文本下方画红线。 .
所以首先您需要将程序集 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}");
}
}
}
希望对您有所帮助。
当我尝试创建用于将 .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
,没有人工作...只是在文本下方画红线。 .
所以首先您需要将程序集 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}");
}
}
}
希望对您有所帮助。