从中删除文件夹.罐子,同时被视为拉链
本文关键字:删除 文件夹 罐子 | 更新日期: 2023-09-27 18:25:08
我需要从.jar文件中删除一个文件夹,但使用sharpziplib将其视为.zip文件。有什么办法吗?
我之前曾尝试使用 sharpziplib "解压缩">.jar文件,然后将其删除并重新压缩,但无济于事 - 更不用说这样做要慢得多。
如何直接删除文件夹?
JAR
类似于ZIP
文件。 JAR
是Java ARchive
。 就像您无法在不解压缩ZIP
文件的情况下直接删除文件/文件夹一样,您必须解压缩JAR
文件才能访问它。
我不
熟悉SharpZibLib,但我之前使用过DotNetZip,您可以将zip文件提取到特定文件夹并删除文件/文件夹,然后在新位置重新压缩内容。
是的,如果要删除并重新压缩它,则需要完全提取它。
我建议这样做,如果,而且只有当你真的知道你在做什么,你真的需要这个,你知道那些jar
的命运是什么。
正如其他用户指出的那样,jar 是一种与 zip 文件或通用压缩存档非常相似的文件格式,主要区别在于安全机制和清单的存在,问题是 jar 并不真正需要最后 2 个存在或被接受为 jar, 但是,如果您只是从 jar 中删除要删除的内容,则可以破坏所有哈希和清单(如果它是一个带有清单的 jar(,最终您的 jar 可能毫无用处。
使用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);
}
我希望这对你有所帮助。
呵呵,与
普遍的看法相反,我不需要解压缩.jar文件。 我只需要这样做(顺便说一句,使用dotnetzip(-
//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);