如何将2个zip文件合并为1个zip

时间:2013-04-19 15:18:11

标签: c# jar minecraft minecraft-forge

我正在尝试用C#为Minecraft制作一个自定义启动器,但我遇到了一个颠簸。

我想在其中添加一些内容,Minecraft Forge,但我能想到的唯一方法是将minecraft.jar的扩展名更改为minecraft.zip,提取Minecraft Forge.zip的内容并将minecraft.zip放入同一文件夹,然后将整个文件夹压缩到minecraft.jar

但是minecraft.jar有一个名为aux.class的文件,所以每当我的提取脚本(Made in java)试图提取它时,它只是说:

  

无法找到文件G:\ Programming \ C#\ Console \ Forge Installer \ Forge Installer \ bin \ Debug \ Merge \ aux.class。

我能想到的唯一另一种方法是将minecraft_forge.zip合并到minecraft.zip,我花了大约2个小时在Google上观看(观看有人在几分钟内看到它)但它总是显示“如何压缩多个文件”,“如何在C#中创建zip文件”等结果。

所以我来到这里寻找我的答案,对不起,如果有很多东西需要阅读,但我总是在这里看到评论“你没有给我们足够的信息来帮助你”。

编辑:如果不清楚的问题是:我如何将minecraft_forge.zip的内容放入minecraft.zip

2 个答案:

答案 0 :(得分:0)

在您的情况下,如果由于操作系统限制而无法解压缩文件,则需要“跳过”解压缩临时文件以压缩它们。相反,只处理输入&输出流,如下面的答案所示:How can I add entries to an existing zip file in Java?

答案 1 :(得分:0)

正如您所指出的,“aux”是Windows中受保护的关键字,文件后缀可能无关紧要; Windows不会让你使用它。以下是一些讨论这个问题的线程。

Ref 1: Windows reserved words.

Ref 2: Windows reserved words.

如果您输入命令来执行复制或解压缩,则可以使用以下\\.\\\?\的路径前缀来实现此功能。当我测试它时,它可以使用句号或问号后的单个或双个反斜杠。这样下面的工作:

\\.\c:\paths\etc
\\.\\c:\paths\etc
\\?\c:\path\etc
\\?\\c:\path\etc

我使用以下命令来测试它。尝试通过Windows资源管理器重命名时,它给出了“指定的设备名称无效”。错误信息。从命令行它工作得很好。我应该指出,一旦你创建了这些文件,就必须使用相同的技术手动删除它们。 Windows资源管理器报告这些大小为0字节的文本文件“对于目标文件系统而言太大”,即...回收站。     重命名“\。\ c:\ temp \ New Text Document.txt”aux.txt     del“\。\ c:\ temp \ aux.txt”

就直接从zip或jar文件中复制而言,我自己尝试了这个并且它似乎有效。我使用7-zip并使用“打开存档...”Windows资源管理器上下文菜单直接打开了jar。然后我将内容从forge.jar拖放到minecraft jar文件中。由于它是具有违规文件名的minecraft jar文件,因此减少了在文件系统上创建临时文件的可能性。我确实看到有人提到7-zip可以在罐子和拉链之间复制时提取到临时文件。 7-zip reference on copying between archives

我应该指出我的minecraft jar(minecraft_server.1.8.7.jar)副本没有包含名为aux.class的文件。复制/合并后我也没有尝试使用jar。我也没有花太多时间来弄清楚它是如何合并这两个内容的,因为看起来可能与com\google\common\base\有冲突,因为有类似的类名但有不同的$变量后缀它们。

我希望这两个可能的建议可以为您提供一些工作空间,以便根据您的需求找到解决方案......如果您仍在寻找。