Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 代码C的问题#_C#_Wpf - Fatal编程技术网

C# 代码C的问题#

C# 代码C的问题#,c#,wpf,C#,Wpf,这是我的密码: private void Instalarbtn_Click(object sender, RoutedEventArgs e) { string MinecraftFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "/.minecraft"; string destinationFile = System.IO

这是我的密码:

 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解压所有文件夹,然后添加一些带有覆盖文件的文件,然后重新打包,请更具体一些

更改此选项并调试,尝试查看异常的错误描述:

catch (Exception e1)
{
    MessageBox.Show(e1.ToString());
}

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

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

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

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

FastZip FastZip = null;
替换为:

FastZip FastZip = new FastZip();
我建议您也将
FastZip
实例的名称(当前称为
FastZip
)更改为更易于识别的
FastZip
,以区别于调用FastZip的(可能的)静态方法,而不是实际实例的方法

FastZip fastZip = new FastZip();
该标记显示C#

如果是这样,您的文件夹分隔符是错误的

如果有疑问,请使用Path.Combine

下面是一个使用它的版本(还有一些额外的变量,因此代码更容易阅读):


我不知道它是否有效。我没有或使用这个FastZip实用程序,我甚至没有费心去理解它的逻辑。

“它不起作用”确切的问题是什么?它不起作用没有足够的信息。与您希望发生的情况相比,发生了什么?到目前为止您执行了哪些诊断?您是否尝试过一步一步地调试代码?您收到了哪些错误消息(如果有的话)?youtube上有大量关于如何安全修补minecraft的视频。
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");
  }

}