我需要从 .jar 文件中删除一个文件夹,但是将其视为带有sharpziplib的 .zip 文件。 有没有办法这样做?
之前我曾尝试使用sharpziplib“解压缩” .jar 文件,然后将其删除并重新压缩,但无济于事 - 更不用说以这种方式执行它要慢得多。
如何直接删除文件夹?
答案 0 :(得分:0)
JAR
类似于ZIP
文件。 JAR
是Java ARchive
。就像您无法在不解压缩ZIP
文件的情况下直接删除文件/文件夹一样,您必须解压缩JAR
文件才能访问它。
答案 1 :(得分:0)
我不熟悉SharpZibLib,但我之前使用过DotNetZip,您可以将zip文件解压缩到特定文件夹并删除文件/文件夹,然后在新位置重新压缩内容。
是的,如果你想删除它并重新拉链,你需要完全解压缩它。
答案 2 :(得分:0)
我建议这样做,只要你真的知道自己在做什么,你真的需要这个,你知道那些jar
的命运将会是什么。
正如其他用户所指出的,jar是一种非常类似于zip文件或通用压缩存档的文件格式,主要区别在于安全机制和清单的存在,问题是罐子没有真的需要最后2件存在或被接受为jar,但如果你只是删除你想要从jar中删除的东西,你可以打破所有散列和清单(如果它是带有清单的jar)和结束你的罐子可能没用。
答案 3 :(得分:0)
好好使用DotNetZip(它也可以在nuget上找到)你可以做这样的事情(或者至少应该给你这个想法):
// define your paths accordingly
string unpackDir = "C:\\unpackDir";
string originalJarFilePath = "C:\\...\\your_file.jar";
string destinationJarFilePath = "C:\\...\\shiny_new_archive.jar";
// unpack
using (var jar = ZipFile.Read(originalJarFilePath))
{
if (!Directory.Exists(unpackDir))
{
Directory.CreateDirectory(unpackDir);
}
jar.ExtractAll(unpackDir, ExtractExistingFileAction.OverwriteSilently);
}
// make a new jar excluding the files you don't want
using (var editedJar = new ZipFile())
{
foreach (string file in Directory.GetFiles(unpackDir).Where(file => file != "IDontWantThisOne.txt"))
{
editedJar.AddFile(file);
}
editedJar.Save(destinationJarFilePath);
}
我希望这会对你有所帮助。
答案 4 :(得分:0)
嗯,与普遍的看法相反,我不需要解压缩.jar文件。我只需要这样做(使用dotnetzip btw) -
//Code to delete META-INF folder
using (ZipFile zip = ZipFile.Read(jarFile))
{
List<string> files = zip.EntryFileNames.ToList<string>();
List<string> delete = new List<string>();
for (int i = 0; i < files.Count; i++)
{
if (files[i].Contains("META-INF"))
{
delete.Add(files[i]);
}
}
zip.RemoveEntries(delete);
zip.Save();
}
MessageBox.Show("Success!", "Success", MessageBoxButtons.OK, MessageBoxIcon.None);