#115 - Creare file ZIP con System.IO.Packaging
di Cristian Civera, in Windows Presentation Foundation, 10 aprile 2009
Con il .NET Framework 3.0 Microsoft ha incluso nuovi framework quali Windows Communication Foundation, Windows Presentation Foundation e Windows Workflow Foundation, ma ha anche aggiunto il supporto alla lettura e la manipolazionei di documenti XPS (XML Paper Specification). Quest'ultimi sono pacchetti di file XML e risorse che rappresentano documenti WYSWYG pronti per essere consultati e stampati.
Di fatto questi pacchetti non sono altro che file ZIP, detti Package i quali contengono file eventualmente compressi, detti PackagePart, strutturati secondo il container ZIP. In unione ad essi è presente un file [Content_Types].xml contenente informazioni aggiuntive come il content-type di ogni file e le relazioni interne o esterne al file stesso.
Questa tecnologia è aperta e può quindi essere sfruttata anche per altri scopi, per esempio per creare semplicemente file ZIP, attraverso la classe ZipPackage del namespace System.IO.Packaging.
// Creo il file ZIP using (Package packege = ZipPackage.Open("test.zip", FileMode.Create)) { // Inserisco il primo file PackagePart part = packege.CreatePart(new Uri("/file1.txt", UriKind.Relative), MediaTypeNames.Text.Plain, CompressionOption.Normal); // Apro lo stream e inserisco del testo using (Stream partStream = part.GetStream()) { using (StreamWriter writer = new StreamWriter(partStream)) { writer.Write("Test"); } } // Creo il secondo file in una sotto directory part = packege.CreatePart(new Uri("/subDir/file2.jpg", UriKind.Relative), MediaTypeNames.Image.Jpeg, CompressionOption.Normal); using (Stream partStream = part.GetStream()) { // Copio il file nello stream using (Stream fileStream = File.OpenRead(@"c:\immagine.jpg")) { fileStream.WriteToStream(partStream, 4096); } } }
Il metodo WriteToStream sullo stream serve per travasare il file ed è descritto nello script #93.
Per approfondimenti su Open Packaging Conventions:
http://www.microsoft.com/whdc/xps/downloads.mspx
Approfondimenti
-
#123 - Intercettare gli eventi del serializzatore WCF
-
Disponibile Microsoft Expression Studio 3
-
.NET Framework 4.0 e VS 2010 in Release Candidate
-
#135 - Gestire il canale di comunicazione con WCF
-
#133 - Una collezione avanzata per il data binding di WPF
-
#143 - Forzare la modalità di rendering software nelle applicazioni WPF
-
#111 - Personalizzare la serializzazione delle entità di ADO.NET Data Services
-
#141 - Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
-
Le problematiche più comuni di un'architettura M-V-VM con WPF
-
#117 - Effettuare stampe con System.Printing
-
#129 - Ruotare la camera di una scena 3D di WPF con il mouse
-
MetadataDiffViewer: differenze tra i framework

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.