从.Jar中删除文件夹同时作为Zip处理

时间:2013-07-28 04:24:02

标签: c# sharpziplib

我需要从 .jar 文件中删除一个文件夹,但是将其视为带有sharpziplib的 .zip 文件。 有没有办法这样做?

之前我曾尝试使用sharpziplib“解压缩” .jar 文件,然后将其删除并重新压缩,但无济于事 - 更不用说以这种方式执行它要慢得多。

如何直接删除文件夹?

5 个答案:

答案 0 :(得分:0)

JAR类似于ZIP文件。 JARJava 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);