Estoy bastante seguro de que esto no es un duplicado, así que tengan paciencia conmigo por solo un minuto.
¿Cómo puedo programar (C #) ZIP un archivo (en Windows) sin usar bibliotecas de terceros? Necesito una llamada nativa de Windows o algo así; Realmente no me gusta la idea de comenzar un proceso, pero lo haré si es absolutamente necesario. Una llamada de PInovke sería mucho mejor.
De lo contrario, déjame decirte lo que realmente estoy tratando de lograr: necesito la capacidad de permitir que un usuario descargue una colección de documentos en una sola solicitud. ¿Alguna idea sobre cómo lograr esto?
c#
compression
zip
download
Esteban Araya
fuente
fuente
Respuestas:
¿Estás usando .NET 3.5? Podrías usar la
ZipPackage
clase y las clases relacionadas. Es más que simplemente comprimir una lista de archivos porque quiere un tipo MIME para cada archivo que agregue. Podría hacer lo que quieras.Actualmente estoy usando estas clases para un problema similar al archivar varios archivos relacionados en un solo archivo para descargar. Usamos una extensión de archivo para asociar el archivo de descarga con nuestra aplicación de escritorio. Un pequeño problema con el que nos encontramos fue que no es posible usar una herramienta de terceros como 7-zip para crear los archivos zip porque el código del lado del cliente no puede abrirlo: ZipPackage agrega un archivo oculto que describe el tipo de contenido de cada archivo componente y no puede abrir un archivo zip si falta ese archivo de tipo de contenido.
fuente
Si se utiliza el marco 4.5+, ahora hay los ZipArchive y ZipFile clases.
Necesita agregar referencias a:
Para .NET Core apuntando a net46, necesita agregar dependencias para
Ejemplo project.json:
Para .NET Core 2.0, todo lo que se necesita es agregar una simple declaración de uso:
fuente
Estaba en la misma situación, queriendo .NET en lugar de una biblioteca de terceros. Como otro póster mencionado anteriormente, simplemente usando la clase ZipPackage (introducida en .NET 3.5) no es suficiente. Hay un archivo adicional que DEBE incluirse en el archivo para que funcione ZipPackage. Si se agrega este archivo, el paquete ZIP resultante se puede abrir directamente desde el Explorador de Windows, no hay problema.
Todo lo que tiene que hacer es agregar el archivo [Content_Types] .xml a la raíz del archivo con un nodo "Predeterminado" para cada extensión de archivo que desee incluir. Una vez agregado, podría examinar el paquete desde el Explorador de Windows o descomprimirlo mediante programación y leer su contenido.
Puede encontrar más información sobre el archivo [Content_Types] .xml aquí: http://msdn.microsoft.com/en-us/magazine/cc163372.aspx
Aquí hay una muestra del archivo [Content_Types] .xml (debe nombrarse exactamente):
Y el C # para crear un archivo ZIP:
Nota:
fuente
fuente
Basado en la respuesta de Simon McKenzie a esta pregunta , sugeriría usar un par de métodos como este:
fuente
Parece que Windows podría dejarte hacer esto ...
Desafortunadamente, no creo que vaya a comenzar un proceso separado a menos que vaya a un componente de terceros.
fuente
Agregue estas 4 funciones a su proyecto:
Y úsalos así:
fuente