-6

这是我的代码:

 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 中解压缩所有文件夹,然后添加一些文件并覆盖文件并再次重新打包

4

4 回答 4

2

请更具体...

改这个并调试,试试看异常的错误描述:

catch (Exception e1)
{
    MessageBox.Show(e1.ToString());
}
于 2013-07-31T20:26:22.320 回答
2

由于您没有具体说明您的问题,我将选择我看到的第一个问题:

string destinationFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "system.zip");

您可能没有此将引用的目录的写入权限。这可能是失败的原因之一。以管理员身份运行您的应用程序,或更改您将写入的目录,如果可行,这很可能是您的问题。

于 2013-07-31T20:29:52.930 回答
1

标记显示 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 实用程序,我什至没有费心去理解它的逻辑。

于 2013-07-31T20:37:30.387 回答
1

您可能必须创建一个新的 FastZip 实例,您当前正在为其分配 null。

FastZip FastZip = null;

用。。。来代替:

FastZip FastZip = new FastZip();

我建议您也更改FastZip实例的名称(当前调用FastZip为更易于识别fastZip,以将其与调用 FastZip 的(可能的)静态方法而不是实际实例的方法区分开来。

FastZip fastZip = new FastZip();
于 2013-07-31T20:32:34.590 回答