代码C#的问题
本文关键字:问题 代码 | 更新日期: 2023-09-27 18:25:47
这是我的代码:
private void Instalarbtn_Click(object sender, RoutedEventArgs e)
{
string MinecraftFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "/.minecraft";
string destinationFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "system.zip");
FastZip FastZip = null;
if (Directory.Exists(MinecraftFolder + "/temp"))
{
Directory.Delete(MinecraftFolder + "/temp", true);
}
FastZip.ExtractZip(MinecraftFolder + "/bin/minecraft.jar", MinecraftFolder + "/temp/Minecraft", String.Empty);
try
{
Directory.Delete(MinecraftFolder + "/temp/Minecraft/META-INF", true);
}
catch (DirectoryNotFoundException e1)
{
}
FastZip.ExtractZip(destinationFile, MinecraftFolder + "/temp", String.Empty);
FastZip.CreateZip(MinecraftFolder + "/bin/minecraft.jar", MinecraftFolder + "/temp/Minecraft", true, String.Empty);
if (Directory.Exists(MinecraftFolder + "/temp"))
{
Directory.Delete(MinecraftFolder + "/temp", true);
MessageBox.Show("Instalado correctamente", "Instalador");
}
}
(抱歉代码太长)
如果有帮助,我正在尝试提取.jar,请在同一文件夹中添加内容,然后重新打包。
不起作用
有人知道,因为它不起作用?
如果知道解决方案,请告诉我
感谢
编辑:有了这段代码,我想从minecraft.jar中解压缩所有文件夹,然后添加一些覆盖文件的文件,并重新打包
由于您没有具体说明您的问题,我将选择我看到的第一个问题:
string destinationFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "system.zip");
您可能没有此目录的写入权限。这可能是失败的原因之一。以管理员身份运行您的应用程序,或者更改要写入的目录,如果这样做有效,这很可能是您的问题。
请更具体。。。
更改并调试,尝试查看异常的错误描述:
catch (Exception e1)
{
MessageBox.Show(e1.ToString());
}
标签显示C#。
如果是这样,则文件夹分隔符是错误的。
如果有疑问,请使用Path.Combine.
这里有一个使用它的版本(还有一些额外的变量,所以代码更容易阅读):
private void Instalarbtn_Click(object sender, RoutedEventArgs e) {
string appFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string MinecraftFolder = Path.Combine(appFolder, "minecraft");
string destinationFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "system.zip");
FastZip FastZip = null;
string minecraftTemp = Path.Combine(MinecraftFolder, "temp");
if (Directory.Exists(minecraftTemp)) {
Directory.Delete(minecraftTemp, true);
}
string minecraftBin = Path.Combine(MinecraftFolder, "bin");
string minecraftTempMinecraft = Path.Combine(minecraftTemp, "Minecraft");
FastZip.ExtractZip(minecraftBin, minecraftTempMinecraft, String.Empty);
string minecraftTempMinecraftMETAINF = Path.Combine(minecraftTempMinecraft, "META-INF");
try {
Directory.Delete(minecraftTempMinecraftMETAINF, true);
} catch (DirectoryNotFoundException e1) {
}
FastZip.ExtractZip(destinationFile, minecraftTemp, String.Empty);
string minecraftBinMinecraftJar = Path.Combine(minecraftBin, "minecraft.jar");
FastZip.CreateZip(minecraftBinMinecraftJar, minecraftTempMinecraft, true, String.Empty);
if (Directory.Exists(minecraftTemp)) {
Directory.Delete(minecraftTemp, true);
MessageBox.Show("Instalado correctamente", "Instalador");
}
}
我不知道它是否有效。我没有也没有使用这个FastZip实用程序,我甚至没有试着理解其中的逻辑。
您可能需要创建一个FastZip的新实例,您当前正在为其分配null。
FastZip FastZip = null;
替换为:
FastZip FastZip = new FastZip();
我建议您也将FastZip
实例的名称(当前称为FastZip
)更改为更易于识别的fastZip
,以区别于调用FastZip的(可能的)静态方法,而不是实际实例的方法。
FastZip fastZip = new FastZip();