2013-07-28 27 views
1

我需要從一個的.jar文件刪除文件夾,而是把它當作.ZIP文件與sharpziplib。 有沒有辦法做到這一點?刪除文件夾從的.jar,同時把一個Zip

我曾嘗試使用sharpziplib「解壓縮」.jar文件,然後將其刪除並重新壓縮,但無濟於事 - 更不用說這樣做會慢得多。

如何直接刪除文件夾?

+0

我也可以使用dotnetzip。 – TheUnrealMegashark

回答

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); 
0

一個JAR類似於ZIP文件。 A JARJava ARchive。就像不能直接刪除文件/文件夾而不拆包ZIP文件一樣,您必須解壓文件JAR才能訪問它。

+0

我該怎麼做?通過「解壓縮」整個罐子? – TheUnrealMegashark

+0

是的,你有「解壓縮」的罐子。爲什麼不使用您正在使用的庫或某些其他ZIP文件庫進行解包/重新打包?如果你有一個庫中的問題,帖子說,但像你會爲沒有先拆包文件系統文件/文件夾,你不能從一個'JAR'文件訪問文件/文件夾。 – BLaZuRE

+0

http://stackoverflow.com/questions/9855155/how-can-i-delete-a-directory-in-a-zip-file-using-net/9855224?noredirect=1#comment26479357_9855224爲什麼他說,這是可能的, 然後? – TheUnrealMegashark

0

我不熟悉SharpZibLib,但我已經使用DotNetZip之前,在那裏你可以把zip文件解壓到一個特定的文件夾,刪除文件/文件夾,然後在新位置重新壓縮的內容。

是的,你需要完全提取它,如果你想刪除並重新再壓縮它。

0

我建議你這樣做,如果你真的知道你在做什麼,你真的需要這個,你知道那些jar的命運會是怎樣。

正如其他用戶指出的,jar是一個非常類似於zip文件或通用壓縮歸檔的文件格式,主要區別在於安全機制和清單的存在,事情是jar並不是「噸真的需要這最後的2個存在,或被接受爲一個罐子,但如果你只是刪除你想從你能打破所有的散列和清單的jar刪除的內容(如果它是一個明顯的罐子)和你的jar結束可能是無用的。

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); 
} 

我希望這可以幫助你。

+0

當我嘗試提取jar文件時,它會返回一個錯誤。 http://hastebin.com/xigiluweko.tex – TheUnrealMegashark

+0

因爲拉鍊包含一個名爲aux.class文件,該文件是Windows禁止文件名。 – TheUnrealMegashark

相關問題