在C#中如何获取程序的当前文件夹名称并将zip文件解压到当前文件夹?
How to get the program's current folder name and extract the zip file to the current folder in C#?
我有一个 Winforms 自动更新程序。
如果我打开该程序,它将从包含 .zip 文件的原始文本下载 link 文件 link 从网络下载到该程序。
但是如果这个人制作了一个文件夹并将程序放在文件夹中,我希望程序获取程序所在的文件夹名称并将 zip 文件解压缩到其中。
这是我的代码:
private void StartDownload()
{
WebClient webClient = new WebClient();
string path = "./Sympathy";
string address1 = "https://ghostbin.co/paste/cjx7j/raw";
string address2 = webClient.DownloadString(address1);
this.progressBar1.Value = 100;
string str = "./Sympathy.zip";
if (System.IO.File.Exists(str))
{
System.IO.File.Delete(str);
}
else
{
webClient.DownloadFile(address2, str);
ZipFile.ExtractToDirectory(str, Directory.GetCurrentDirectory(Directory).Name);
System.IO.File.Delete(str);
}
}
但是我在 (Directory)
部分有错误,我该如何解决?
通过这一行,您可以获得应用程序的当前目录。
Application.StartupPath;
它会为您提供 .exe 运行 应用程序的文件夹。
您收到的错误是什么?这将有助于解决您遇到的问题。
你提到你在代码的 (Directory)
部分遇到错误,我在这一行看到了一些东西:
- 方法
Directory.GetCurrentDirectory
不需要输入;
- 不能将类型作为参数传递;
- 调用
Directory.GetCurrentDirectory()
returns一个字符串,就不能调用属性Name
了
请注意,此调用的结果并不总是在您的应用程序所在的位置。如果检查超链接的属性,可以设置 Target
' 和 Start in
。 Target
是您的程序,Start in
是提供给您的应用程序的当前目录。除了创建超链接,您还可以打开命令提示符(默认为您的主目录)并键入应用程序的完整路径,这将导致您的应用程序打开并接收命令提示符指向的路径作为当前目录(在默认情况下,您的主目录)。 post Get current folder path 中的答案对此进行了更深入的详细介绍。
要获取可执行文件的路径,请使用 System.Reflection.Assembly.GetEntryAssembly().Location;
,要获取目录,请使用 Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
我看到你的代码有缺陷。改用它来做所有事情:
string archivePath = "Sympathy.zip";
using (var client = new WebClient())
{
client.DownloadFile(client.DownloadString("https://ghostbin.co/paste/cjx7j/raw"), archivePath);
ZipFile.ExtractToDirectory(archivePath, Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location));
File.Delete(archivePath);
}
有效。它下载了一堆未知文件。
我有一个 Winforms 自动更新程序。
如果我打开该程序,它将从包含 .zip 文件的原始文本下载 link 文件 link 从网络下载到该程序。
但是如果这个人制作了一个文件夹并将程序放在文件夹中,我希望程序获取程序所在的文件夹名称并将 zip 文件解压缩到其中。
这是我的代码:
private void StartDownload()
{
WebClient webClient = new WebClient();
string path = "./Sympathy";
string address1 = "https://ghostbin.co/paste/cjx7j/raw";
string address2 = webClient.DownloadString(address1);
this.progressBar1.Value = 100;
string str = "./Sympathy.zip";
if (System.IO.File.Exists(str))
{
System.IO.File.Delete(str);
}
else
{
webClient.DownloadFile(address2, str);
ZipFile.ExtractToDirectory(str, Directory.GetCurrentDirectory(Directory).Name);
System.IO.File.Delete(str);
}
}
但是我在 (Directory)
部分有错误,我该如何解决?
通过这一行,您可以获得应用程序的当前目录。
Application.StartupPath;
它会为您提供 .exe 运行 应用程序的文件夹。
您收到的错误是什么?这将有助于解决您遇到的问题。
你提到你在代码的 (Directory)
部分遇到错误,我在这一行看到了一些东西:
- 方法
Directory.GetCurrentDirectory
不需要输入; - 不能将类型作为参数传递;
- 调用
Directory.GetCurrentDirectory()
returns一个字符串,就不能调用属性Name
了
请注意,此调用的结果并不总是在您的应用程序所在的位置。如果检查超链接的属性,可以设置 Target
' 和 Start in
。 Target
是您的程序,Start in
是提供给您的应用程序的当前目录。除了创建超链接,您还可以打开命令提示符(默认为您的主目录)并键入应用程序的完整路径,这将导致您的应用程序打开并接收命令提示符指向的路径作为当前目录(在默认情况下,您的主目录)。 post Get current folder path 中的答案对此进行了更深入的详细介绍。
要获取可执行文件的路径,请使用 System.Reflection.Assembly.GetEntryAssembly().Location;
,要获取目录,请使用 Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
我看到你的代码有缺陷。改用它来做所有事情:
string archivePath = "Sympathy.zip";
using (var client = new WebClient())
{
client.DownloadFile(client.DownloadString("https://ghostbin.co/paste/cjx7j/raw"), archivePath);
ZipFile.ExtractToDirectory(archivePath, Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location));
File.Delete(archivePath);
}
有效。它下载了一堆未知文件。