.jarファイルからフォルダーを削除する必要がありますが、sharpziplib を使用して.zipファイルとして扱います。そうする方法はありますか?
以前に、sharpziplib を使用し て.jarファイルを「解凍」し、削除して再圧縮しようとしましたが、役に立ちませんでした。
フォルダを直接削除するにはどうすればよいですか?
.jarファイルからフォルダーを削除する必要がありますが、sharpziplib を使用して.zipファイルとして扱います。そうする方法はありますか?
以前に、sharpziplib を使用し て.jarファイルを「解凍」し、削除して再圧縮しようとしましたが、役に立ちませんでした。
フォルダを直接削除するにはどうすればよいですか?
これは、自分が何をしているのかを本当に理解しており、これが本当に必要であり、それらの運命がどうなるかを知っている場合にのみ行うことをお勧めしますjar.
他のユーザーから指摘されたように、jar は zip ファイルまたは一般的な圧縮アーカイブと非常によく似たファイル形式です。主な違いは、セキュリティ メカニズムとマニフェストの存在です。問題は、jar がこれを実際に必要としないことです。存在するか、jar として受け入れられる最後の 2 つの部分ですが、jar から削除したいものを削除するだけで、すべてのハッシュとマニフェスト (マニフェストを持つ jar の場合) を壊すことができ、最後に jarおそらく駄目でしょう。
AJARはZIPファイルに似ています。AJARはJava ARchiveです。ファイルを解凍せずにファイル/フォルダーを直接削除できないのと同じように、ファイルにアクセスするにはファイルZIPを解凍する必要があります。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 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);