2

私は最近、自分のプロジェクトのランチャーを作成することにしました。サーバーから更新されたファイルをダウンロードして解凍し、一部のファイルをマージして (ランチャーの設定によって内容が異なるため)、1 つの .zip ファイルにパックするだけです。

ダウンロードとマージのプロセスは完全に機能すると確信していますが、最後のプロセスである圧縮は機能しません。

圧縮するための私のコードは次のとおりです。

-- 動かないコードはここにありました。--

.zip ファイルは正しく作成されていますが、ゲーム ディレクトリに配置すると、ゲームが起動しません (破損していると表示されます)。しかし、WinRar で開くと (はい、エラーなしで開きます。「テスト」機能でもエラーは表示されません)、ランダムなファイルを 1 つ追加するだけで、ゲームが開始されます。

WinRar は正しい方法で zip ファイルを再作成するようですが、ランチャーで再作成することはできません。

何か案は?

編集1:

動作するはずの別のコードを見つけました:



      private static void zipDir(String zipFileName, String dir) throws Exception {
            File dirObj = new File(dir);
            ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
            System.out.println("Creating : " + zipFileName);
            addDir(dirObj, out);
            out.close();
          }

          static void addDir(File dirObj, ZipOutputStream out) throws IOException {
            File[] files = dirObj.listFiles();
            byte[] tmpBuf = new byte[1024];

            for (int i = 0; i < files.length; i++) {
              if (files[i].isDirectory()) {
                addDir(files[i], out);
                continue;
              }
              String fap = files[i].getAbsolutePath();
              String rel_path = fap.substring(fap.indexOf("wypakowane") + 11).replace("\\", "/");
              FileInputStream in = new FileInputStream(fap);
              System.out.println(" Adding: " + rel_path);
              out.putNextEntry(new ZipEntry(rel_path));
              int len;
              while ((len = in.read(tmpBuf)) > 0) {
                out.write(tmpBuf, 0, len);
              }
              out.closeEntry();
              in.close();
            }
          }

ZIPファイル内にディレクトリを作成すると思います。残念ながら、まだゲームが起動しません... (「wypakowane」は、ZIP ファイルに入れたいすべてのファイルを含むディレクトリです。)

編集2:

両方のアーカイブを比較しました.1つは私のJavaアプリで作成されたもので、もう1つはWinRarがランダムなファイルを追加して作成したものです。それらは同一であり、同じ CRC、同じ属性を持ち、正しく解凍されます。しかし、ゲームは最初のものでクラッシュし、2番目のものでスムーズに実行されます. 私はアイデアが不足しています。何か助けはありますか?

4

1 に答える 1

2

You don't appear to be making entries for the directories themselves, only for the files. While the directory entries can be reconstructed from the file paths, if you don't put in the explicit entries a lot of software won't work correctly with the file.

A directory entry is just a regular entry where the path ends with "/".

于 2012-07-26T14:44:44.280 に答える