c# - que - ¿Cuál es la mejor/más fácil forma de crear un archivo ZIP en.NET?
como crear un archivo comprimido (7)
Como está orientando Framework 3.5, iría con System.IO.Packaging
. Es una biblioteca diseñada específicamente para comprimir y viene con el marco, por lo que ni siquiera hay una DLL adicional necesaria para el producto. El ejemplo de uso es atroz, sin embargo.
No se recomienda usar el caparazón. En primer lugar, solo funcionaría en Windows XP y superior. Pero incluso si eso no te importa, sus riesgos son bastante numerosos (lo he hecho antes, pero solo porque realmente no tuve otra opción).
si no apuntas a 3.5, usaría SharpZipLib
. Es una biblioteca bastante buena, e incluso si usa 3.5, podría considerarla.
¿Qué método crees que es el "mejor"?
- Use el espacio de nombres
System.IO.Packaging
? - ¿Usa interoperabilidad con el Shell?
- Biblioteca de terceros para .NET?
- ¿Interopera con DLL no administrado de código abierto?
[Puedo orientarme a Framework 3.5; mejor = más fácil de diseñar, implementar y mantener.]
Estoy muy interesado en por qué crees que el enfoque elegido es el mejor.
He encontrado que la Biblioteca DotNetZip es la forma más fácil de trabajar con archivos zip. SharpZipLib es una solución mucho más poderosa y flexible.
Siempre he usado SharpZipLib
Olvidé la parte del por qué: Principalmente porque ha existido por mucho tiempo. Está bien documentado y tiene una API intuitiva. Además, es de código abierto si te gusta ese tipo de cosas.
Las clases GZipStream y DeflateStream en el espacio de nombres System.IO.Compression hacen que sea muy fácil comprimir las cosas.
ACTUALIZACIÓN: los comentarios indican correctamente que estas clases no le permiten manipular un archivo Zip. Sin embargo, los dlls J # contienen la funcionalidad requerida en los espacios de nombres java.util y java.io. Para obtener más detalles, consulte el artículo de Code Project de dmihailescu que detalla su uso y proporciona un código de muestra.
Nadie ha mencionado el componente Xceed Zip. Lo he usado antes y funcionó excelente para crear archivos zip y comprimir flujos de datos. Lo recomiendo encarecidamente, pero puede haber una compensación de honorarios de licencia.
DotNetZip es muy simple de usar. Me gusta porque está totalmente administrado, no se requiere interacción de shell. El modelo de programación es más simple y más limpio que el del shell. También es más simple que SharpZipLib, así como las clases de Packaging agregadas en .NET 3.0. Es gratis, pequeño, mantenido activamente.
Es mucho mejor que la opción J # ofrecida por un póster: J # es un gran tiempo de ejecución y una pastilla gigante para tragar y obtener solo soporte ZIP. También el soporte de J # se está suspendiendo. Probablemente no sea una buena idea introducir nuevas dependencias en J #.
Código de ejemplo para DotNetZip:
try
{
using (ZipFile zip = new ZipFile(args[0], System.Console.Out))
{
zip.AddDirectory(args[1]); // recurses subdirectories
zip.Save();
}
}
catch (System.Exception ex1)
{
System.Console.Error.WriteLine("exception: " + ex1);
}
DotNetZip funciona con .NET v2.0, 3.0, 3.5 y Compact Framework v2.0 y 3.5. Hace archivos ZIP, nombres de archivo Unicode, comentarios, contraseñas. Tiene ZIP64, así como archivos autoextraíbles. Es rápido. Intentalo.
Me doy cuenta de que esta es una vieja pregunta ahora, pero pensé que agregaría una respuesta más actualizada. Si está utilizando .NET 4.5, entonces puede guardar mediante programación múltiples archivos en una carpeta zip fácilmente utilizando la nueva clase integrada de ZipFile
.
Primero, tendrá que preparar sus archivos en una nueva carpeta ( Directory.CreateDirectory
, File.Move
) y luego simplemente puede usar el método ZipFile.CreateFromDirectory
(adaptado de la página enlazada):
string filePathOfNewFolder = @"c:/example/start";
string zipFilePath = @"c:/example/result.zip";
ZipFile.CreateFromDirectory(filePathOfNewFolder, zipFilePath);