-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");

これが参照するディレクトリへの書き込み権限がない可能性があります。これが失敗の原因の 1 つとなる場合があります。アプリケーションを管理者として実行するか、書き込み先のディレクトリを変更します。それが機能する場合、これが問題である可能性があります。

于 2013-07-31T20:29:52.930 に答える
1

おそらく、FastZip の新しいインスタンスを作成する必要があります。現在 null を割り当てています。

FastZip FastZip = null;

と置換する:

FastZip FastZip = new FastZip();

FastZipインスタンスの名前も変更することをお勧めします(現在は、実際のインスタンスのメソッドではなく、FastZip の (可能な) 静的メソッドの呼び出しと区別するためFastZipに、より簡単に認識できるように呼び出されます。fastZip

FastZip fastZip = new FastZip();
于 2013-07-31T20:32:34.590 に答える
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 に答える