我需要從一個的.jar文件刪除文件夾,而是把它當作.ZIP文件與sharpziplib。 有沒有辦法做到這一點?刪除文件夾從的.jar,同時把一個Zip
我曾嘗試使用sharpziplib「解壓縮」.jar文件,然後將其刪除並重新壓縮,但無濟於事 - 更不用說這樣做會慢得多。
如何直接刪除文件夾?
我需要從一個的.jar文件刪除文件夾,而是把它當作.ZIP文件與sharpziplib。 有沒有辦法做到這一點?刪除文件夾從的.jar,同時把一個Zip
我曾嘗試使用sharpziplib「解壓縮」.jar文件,然後將其刪除並重新壓縮,但無濟於事 - 更不用說這樣做會慢得多。
如何直接刪除文件夾?
咦,流行的看法相反,我並不需要解壓.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);
一個JAR
類似於ZIP
文件。 A JAR
是Java ARchive
。就像不能直接刪除文件/文件夾而不拆包ZIP
文件一樣,您必須解壓文件JAR
才能訪問它。
我該怎麼做?通過「解壓縮」整個罐子? – TheUnrealMegashark
是的,你有「解壓縮」的罐子。爲什麼不使用您正在使用的庫或某些其他ZIP文件庫進行解包/重新打包?如果你有一個庫中的問題,帖子說,但像你會爲沒有先拆包文件系統文件/文件夾,你不能從一個'JAR'文件訪問文件/文件夾。 – BLaZuRE
http://stackoverflow.com/questions/9855155/how-can-i-delete-a-directory-in-a-zip-file-using-net/9855224?noredirect=1#comment26479357_9855224爲什麼他說,這是可能的, 然後? – TheUnrealMegashark
我不熟悉SharpZibLib,但我已經使用DotNetZip之前,在那裏你可以把zip文件解壓到一個特定的文件夾,刪除文件/文件夾,然後在新位置重新壓縮的內容。
是的,你需要完全提取它,如果你想刪除並重新再壓縮它。
我建議你這樣做,如果你真的知道你在做什麼,你真的需要這個,你知道那些jar
的命運會是怎樣。
正如其他用戶指出的,jar是一個非常類似於zip文件或通用壓縮歸檔的文件格式,主要區別在於安全機制和清單的存在,事情是jar並不是「噸真的需要這最後的2個存在,或被接受爲一個罐子,但如果你只是刪除你想從你能打破所有的散列和清單的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文件時,它會返回一個錯誤。 http://hastebin.com/xigiluweko.tex – TheUnrealMegashark
因爲拉鍊包含一個名爲aux.class文件,該文件是Windows禁止文件名。 – TheUnrealMegashark
我也可以使用dotnetzip。 – TheUnrealMegashark