net example descomprimir c# zip extract dotnetzip

example - unzip c#



¿Extraer un archivo ZIP programáticamente por la biblioteca DotNetZip? (3)

Hay un método ExtractSelectedEntries en la clase ZipFile. Aquí está la firma del método.

public void ExtractSelectedEntries(string selectionCriteria, string directoryPathInArchive, string extractDirectory, ExtractExistingFileAction extractExistingFile)

Por lo tanto, en su programa, puede simplemente extraer los archivos especificados proporcionando el selectionCriteria.

public void ExtractFileToDirectory(string zipFileName, string outputDirectory) { ZipFile zip = ZipFile.Read(zipFileName); Directory.CreateDirectory(outputDirectory); zip.ExtractSelectedEntries("name = *.doc", "document/", outputDirectory, ExtractExistingFileAction.OverwriteSilently); }

Puede combinar criterios con las conjunciones AND u OR. Al usar una cadena como "nombre = * .txt Y tamaño> = 100k" para la selección, la contraseña recupera las entradas cuyos nombres terminan en .txt y cuyo tamaño sin comprimir es mayor o igual a 100 kilobytes.

aquí hay algunos ejemplos de criterios

criterios (archivos recuperados)

nombre! = * .xls (cualquier archivo con una extensión que no sea .xls)

name = * .mp3 (cualquier archivo con una extensión .mp3)

* .mp3 (igual que arriba, cualquier archivo con la extensión .mp3)

atributos = A (todos los archivos cuyos atributos incluyen el bit de archivo)

atributos! = H (todos los archivos cuyos atributos no incluyen el bit Oculto)

mtime> 2009-01-01 (todos los archivos con una fecha de última modificación posterior al 1 de enero de 2009)

tamaño> 2 gb (todos los archivos cuyo tamaño sin comprimir es mayor que 2 gb)

Para obtener más información, debe leer el documento API solo con la biblioteca.

Tengo una función que obtiene un archivo ZIP y lo DotNetZip a un directorio (uso la biblioteca DotNetZip ).

public void ExtractFileToDirectory(string zipFileName, string outputDirectory) { ZipFile zip = ZipFile.Read(zipFileName); Directory.CreateDirectory(outputDirectory); zip.ExtractAll(outputDirectory,ExtractExistingFileAction.OverwriteSilently); }

Mi archivo ZIP contiene varios archivos y directorios. Pero quiero extraer solo algunos de estos archivos, no todos.

¿Cómo puedo hacer que esto funcione?


Necesitas probar cada ZipEntry para ver si quieres extraerlo:

public void ExtractFileToDirectory(string zipFileName, string outputDirectory) { ZipFile zip = ZipFile.Read(zipFileName); Directory.CreateDirectory(outputDirectory); foreach (ZipEntry e in zip) { // check if you want to extract e or not if(e.FileName == "TheFileToExtract") e.Extract(outputDirectory, ExtractExistingFileAction.OverwriteSilently); } }

.

ZipFile zip = ZipFile.Read(zipFileName); //Runs in framework 4.5


También puede usar LINQ para seleccionar las entradas que desea extraer. Por ejemplo:

using (var zip = ZipFile.Read(ArchiveToRead)) { var selection = from e in zip.Entries where System.IO.Path.GetFileName(e.FileName).StartsWith("C") select e; foreach (var e in selection) e.Extract(extractDir); }

Por supuesto, puede utilizar los criterios de consulta que desee en la cláusula where .