0

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

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

但是minecraft.jar有一个文件aux.class,所以每当我的提取脚本(Java 制作)尝试提取它时,它只是说:

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

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

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

编辑:如果不清楚,问题是:我怎样才能将内容minecraft_forge.zip放入minecraft.zip

4

2 回答 2

0

在您的情况下,如果由于操作系统限制而无法解压缩文件,则需要“跳过”解压缩临时文件以对其进行压缩。相反,只处理输入和输出流,正如在此处找到的答案中所建议的那样:如何将条目添加到 Java 中的现有 zip 文件?

于 2013-04-20T10:38:22.200 回答
0

正如您所指出的,“aux”是 Windows 中的受保护关键字,文件后缀是什么并不重要;windows不会让你使用它。这里有几个讨论这个问题的线程。

参考 1:Windows 保留字。

参考 2:Windows 保留字。

如果您正在输入命令来执行复制或解压缩,则有可能通过使用以下路径前缀\\.\\\?\. 当我对此进行测试时,它可以在句号或问号之后使用单反斜杠或双反斜杠。这样以下工作:

\\.\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 资源管理器上下文菜单直接打开罐子。然后我将内容从 forge.jar 拖放到 minecraft jar 文件中。由于它是具有违规文件名的 minecraft jar 文件,因此减少了需要在文件系统上创建临时文件的机会。我确实看到有人提到在 jar 和 zip 之间复制时,7-zip 可能会提取到临时文件中。 关于在档案之间复制的 7-zip 参考

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

我希望这两个可能的建议可以为您提供一些空间来找到满足您需求的解决方案......如果您仍在寻找。

于 2016-01-27T19:30:46.953 回答