La guía o código que hallarás en este artículo es la resolución más fácil y válida que hallamos a esta inquietud o problema.
Solución:
No.
Los paquetes Zip no son archivos Zip (normales). Deben seguir una estructura impuesta y contener que Content_Types.xml
archivo en la raíz. ZipPackage = ZipArchive + Structure
.
Si desea crear (y especialmente si desea leer) archivos Zip normales, necesitará una biblioteca adicional, no hay soporte en BCL.
Ver SharpZipLib (GPL) y DotNetZip
Si no llama al método .Flush(), no habrá tal archivo
Sí, puede crear paquetes zip sin agregar el archivo de contenido XML adicional
Inspirado en este enlace: Uso de System.IO.Packaging para generar un archivo ZIP
Usando el descubrimiento anterior mencionado por Yiping, puede evitar el archivo xml adicional agregado al paquete. Guarde el flujo zip del flujo de memoria en un archivo zip físico antes de que el archivo zip se cierre de esta manera:
public static void AddFilesToZip(string zipFilename, List filesToAdd)
using (var memStream = new MemoryStream())
using (Package zip = System.IO.Packaging.Package.Open(memStream, FileMode.Create))
foreach (var fileToAdd in filesToAdd)
string destFilename = ".\" + Path.GetFileName(fileToAdd);
Uri uri = PackUriHelper.CreatePartUri(new Uri(destFilename, UriKind.Relative));
//Existing parts not likely in fresh memory stream
if (zip.PartExists(uri))
zip.DeletePart(uri);
PackagePart part = zip.CreatePart(uri, "", CompressionOption.Normal);
using (FileStream fileStream = new FileStream(fileToAdd, FileMode.Open, FileAccess.Read))
using (Stream dest = part.GetStream())
CopyStream(fileStream, dest);
//The zip Package will add an XML content type file to memeory stream when it closes
//so before it closes we save the memorystream to physical zip file.
using (FileStream zipfilestream = new FileStream(zipFilename, FileMode.Create, FileAccess.Write))
memStream.Position = 0;
CopyStream(memStream, zipfilestream);
// That's it. Zip file saved to file. Things added by package after this point will be to memory stream finally disposed.
Puedes animar nuestra publicación mostrando un comentario y puntuándolo te damos las gracias.