2012-09-23 12 views
5

Estoy creando zip usando la biblioteca dotnetzip.Cómo comprobar si el archivo existe en un archivo zip usando dotnetzip

Pero no sé cómo comprobar si existe un archivo en el zip. Si el archivo existe, entonces actualizaré el archivo con la ruta.

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

código agregado, estoy tratando de hacer que – chetan

+0

Qué ejemplo concreto, lo que está mal? –

+0

Llamo a esta función a través de un bucle. y pasando el nombre del archivo con la ruta. Recibo el error "Ya se ha agregado un elemento con la misma clave" – chetan

Respuesta

8

cómo comprobar si el archivo existe en el archivo zip?

sólo tiene que utilizar LINQ Any, suponga que tiene de entrada archivo zip input.zip, para comprobar si input.zip contiene input.txt: (. Esto no se DotNetZip pero conseguirá el trabajo hecho)

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

+1; Sin embargo, una palabra de advertencia: si no me equivoco, el 'FileEntry.FileName' también puede contener (parte de) una ruta de directorio, vea [aquí] (http://dotnetzip.herobo.com/DNZHelp/html/913abfd3 -bbc6-803c-858b-f53dfb008e55.htm). –

+0

@AndersGustafsson: gracias, he ejecutado este código, no contiene ruta del directorio –

+0

¿Cómo puedo verificar si el archivo tiene información de carpeta como c: \ ab \ input.txt – chetan

2

Reclama: using System.IO.Compression;

Ensamblaje: 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; 
} 

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

+0

Tenga cuidado con la descompresión de archivos comprimidos con una Mac. Esos .zips pueden contener un subdirectorio, "_MACOSX". Ignoro esos al probar Contains ("_ MACOSX") primero y continuar. –

Cuestiones relacionadas