2012-09-23 12 views
5

Sto creando zip usando la libreria dotnetzip.Come verificare se il file esiste nel file zip usando dotnetzip

Ma non so come controllare se un file esiste nello zip. Se il file esiste, aggiornerò il file con il percorso.

public void makezip(string flname) 
    { 
     string fln =flname; 
     string curFile = @"d:\crs.zip"; 
     if (File.Exists(curFile)) 
     { 
       ZipFile zipfl = ZipFile.Read(@"D:\crs.zip"); 
      var result = zipfl.Any(entry => entry.FileName.EndsWith(@fln)); 
      if (result == true) { 
       zipfl.UpdateFile(@fln); 
       }else{ 
        zipfl.AddFile(@fln); 
       } 
      zipfl.Save(@"d:\crs.zip"); 
     } 
     else 
     { 
      try 
      { 
       ZipFile zipfl = new ZipFile(); 

       var result = zipfl.Any(entry => entry.FileName.EndsWith(@fln)); 
       if (result == true) 
       { 
        zipfl.AddFile(@fln); 
       } 
       zipfl.Save(@"d:\crs.zip"); 
      }catch { 
       MessageBox.Show("Invalid Zip File"); 

      }}} 
+0

codice aggiunto, nel tentativo di farlo – chetan

+0

Quale esempio concreto, che è sbagliato? –

+0

Sto chiamando questa funzione attraverso un ciclo. e passando il nome del file con il percorso. Ricevo un errore "È già stato aggiunto un elemento con la stessa chiave" – chetan

risposta

8

Come verificare se il file esiste nel file zip?

Basta utilizzare LINQ Any, suppone che si abbia in ingresso file zip input.zip, per verificare se input.zip contiene input.txt: (. Questo non è DotNetZip ma otterrà il lavoro fatto)

var zipFile = ZipFile.Read(@"C:\input.zip"); 
var result = zipFile.Any(entry => entry.FileName.EndsWith("input.txt")); 
+1

+1; una parola di cautela però: se non sbaglio, 'FileEntry.FileName' può contenere (parte di) un percorso di directory, vedi [qui] (http://dotnetzip.herobo.com/DNZHelp/html/913abfd3 -bbc6-803c-858b-f53dfb008e55.htm). –

+0

@AndersGustafsson: grazie, ho eseguito questo codice, non containe dir percorso –

+0

Come posso controllare se il file ha le informazioni sulla cartella come c: \ ab \ input.txt – chetan

2

Richiede: using System.IO.Compression;

Assemblaggio: System.IO.Compression.FileSystem.dll

public static bool ZipHasFile(string fileFullName, string zipFullPath) 
{ 
    using (ZipArchive archive = ZipFile.OpenRead(zipFullPath)) //safer than accepted answer 
    { 
     foreach (ZipArchiveEntry entry in archive.Entries) 
     { 
      if (entry.FullName.EndsWith(fileFullName, StringComparison.OrdinalIgnoreCase)) 
      { 
       return true; 
      } 
     } 
    } 
    return false; 
} 

Esempio chiamata: var exists = ZipHelper.ZipHasFile(@"zipTest.txt", @"C:\Users\...\Desktop\zipTest.zip");

+0

Ricordati di decomprimere i file che sono stati compressi utilizzando un Mac. Questi .zip potrebbero contenere una sottodirectory, "_MACOSX". Ignoro quelli testando per Contains ("_ MACOSX") prima e continuando. –