¿Cómo puedo crear archivos 7-Zip desde mi aplicación de consola C #? Necesito poder extraer los archivos usando el programa 7-Zip regular y ampliamente disponible .
Aquí están mis resultados con los ejemplos proporcionados como respuestas a esta pregunta
- "Desgranar" a 7z.exe: este es el método más simple y eficaz, y puedo confirmar que funciona bien . Como menciona workmad3 , solo necesito garantizar que 7z.exe esté instalado en todas las máquinas de destino, lo cual es algo que puedo garantizar.
- 7Zip en la compresión de la memoria : esto se refiere a comprimir las cookies "en la memoria" antes de enviarlas al cliente; este método parece algo prometedor. Los métodos de envoltura (envolviendo el SDK de LZMA ) devuelven el tipo
byte[]
. Cuando escribo labyte[]
matriz en un archivo, no puedo extraerlo usando 7-Zip (File.7z is not supported archive
). - 7zSharp Wrapper (que se encuentra en CodePlex): envuelve el 7z exe / LZMA SDK . Hice referencia al proyecto desde mi aplicación y creó con éxito algunos archivos de almacenamiento, pero no pude extraer los archivos con el programa 7-Zip normal (
File.7z is not supported archive
). - 7Zip SDK también conocido como LZMA SDK - Supongo que no soy lo suficientemente inteligente como para averiguar cómo usar esto (por eso publiqué aquí) ... Cualquier ejemplo de código que funcione que demuestre la creación de un archivo 7zip que pueda ser extraído por el programa 7zip regular?
- Interfaz CodeProject C # (.NET) para archivos DLL de archivos 7-Zip : solo admite la extracción de archivos 7zip ... ¡Necesito crearlos!
- SharpZipLib : según sus preguntas frecuentes , SharpZipLib no es compatible con 7zip.
c#
.net
compression
7zip
Seibar
fuente
fuente
Respuestas:
fuente
Ejemplo de cookie de EggCafe 7Zip Este es un ejemplo (cookie de zip) con la DLL de 7Zip.
CodePlex Wrapper Este es un proyecto de código abierto que deforma la función de compresión de 7z.
7Zip SDK El SDK oficial para 7zip (C, C ++, C #, Java) <--- Mi sugerencia
Biblioteca zip .Net de SharpDevelop.net
Ejemplo de CodeProject con 7zip
SharpZipLib Muchas cremalleras
fuente
SevenZipSharp es otra solución. Crea archivos 7-zip ...
fuente
Aquí hay un ejemplo de trabajo completo usando el SevenZip SDK en C #.
Escribirá y leerá archivos 7zip estándar creados por la aplicación Windows 7zip.
PD. El ejemplo anterior nunca se iba a descomprimir porque nunca escribió la información de propiedad requerida al comienzo del archivo.
fuente
Usé el sdk.
p.ej:
fuente
Simplemente instale 7 zip desde la fuente y pase el parámetro al método.
Gracias. Por favor, dale me gusta a la respuesta.
fuente
Yo uso este codigo
fuente
Instale el paquete NuGet llamado
SevenZipSharp.Interop
Luego:
fuente
Alguna información de prueba adicional sobre el código de @Orwellophile usando un archivo de texto de 17,9 MB.
El uso de los valores de propiedad en el código de ejemplo "tal cual" tendrá un ENORME impacto negativo en el rendimiento, tarda 14,16 segundos .
Establecer las propiedades de la siguiente manera hace el mismo trabajo en 3.91 segundos (por ejemplo, el archivo tendrá la misma información de contenedor, que es: puede extraer y probar el archivo con 7zip pero no hay información de nombre de archivo)
7zip nativo 2 seg.
Hice otra prueba usando 7zip nativo y un archivo de respaldo SQL de 1,2GB (.bak)
7zip (compresión máxima): 1 minuto
LZMA SDK (@Orwellophile con la configuración de propiedad anterior): 12:26 min :-(
Outputfile aproximadamente del mismo tamaño .
Así que supongo que usaré una solución basada en el motor c / c ++, ya sea llamar al ejecutable 7zip desde c # o usar squid-box / SevenZipSharp , que es un envoltorio alrededor del archivo 7zip c / c ++ dll, y parece para ser la bifurcación más nueva de SevenZipSharp. No he probado el contenedor, pero espero que funcione igual que el 7zip nativo. Pero con suerte, también dará la posibilidad de comprimir el flujo, lo que obviamente no puede si llama al exe directamente. De lo contrario, supongo que no hay una gran ventaja sobre llamar al exe. El contenedor tiene algunas dependencias adicionales por lo que no hará que su proyecto publicado sea "más limpio".
Por cierto, parece que el equipo de .Net Core considera implementar LZMA en la clase system.io en .Core ver. 5, ¡eso sería genial!
(Sé que esto es una especie de comentario y no una respuesta, pero para poder proporcionar el fragmento de código, no podría ser un comentario)
fuente
Esta forma más sencilla es trabajar con archivos .zip en lugar de .7z y usar Dot Net Zip
Al girar los comandos 7zip al shell, hay otros problemas como los privilegios de usuario, tuve un problema con SevenZipSharp.
fuente
SharpCompress es, en mi opinión, una de las bibliotecas de compresión más inteligentes que existen. Es compatible con LZMA (7-zip), es fácil de usar y está en desarrollo activo.
Como ya tiene soporte de transmisión LZMA, en el momento de escribir este artículo, lamentablemente solo admite la lectura de archivos 7-zip. PERO la escritura de archivos está en su lista de tareas pendientes (ver léame). Para futuros lectores: Verifique para obtener el estado actual aquí: https://github.com/adamhathcock/sharpcompress/blob/master/FORMATS.md
fuente