Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original
Este tema aún no ha recibido ninguna valoración - Valorar este tema

Cómo: Comprimir y extraer archivos

El espacio de nombres System.IO.Compression contiene los siguientes tipos para comprimir y descomprimir los archivos y las secuencias. También puede utilizar estos tipos para leer y modificar el contenido de un archivo comprimido:

La los ejemplos siguientes se muestra algunas de las funciones que se pueden realizar al trabajar con archivos comprimidos.

Este ejemplo muestra cómo crear y extraer un archivo comprimido que tengan una extensión de nombre de archivo .zip mediante la clase de ZipFile . Comprime el contenido de una carpeta en un nuevo archivo .zip y luego extrae el contenido a una nueva carpeta. Para usar la clase ZipFile , debe referenciar al ensamblado System.IO.Compression.FileSystem en su proyecto.


using System;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string startPath = @"c:\example\start";
            string zipPath = @"c:\example\result.zip";
            string extractPath = @"c:\example\extract";

            ZipFile.CreateFromDirectory(startPath, zipPath);

            ZipFile.ExtractToDirectory(zipPath, extractPath);
        }
    }
}


El ejemplo siguiente se muestra cómo recorrer en iteración del contenido de un archivo .zip y archivos de fragmento que tienen la extensión .txt. Utiliza la clase de ZipArchive para tener acceso a un archivo .zip, y la clase de ZipArchiveEntry inspeccionar las entradas individuales en el archivo comprimido. utiliza un método de extensión (ExtractToFile) para el objeto de ZipArchiveEntry . El método de extensión está disponible en la clase de System.IO.Compression.ZipFileExtensions . Use la clase de ZipFileExtensions , debe hacer referencia al ensamblado de System.IO.Compression.FileSystem en el proyecto.


using System;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string zipPath = @"c:\example\start.zip";
            string extractPath = @"c:\example\extract";

            using (ZipArchive archive = ZipFile.OpenRead(zipPath))
            {
                foreach (ZipArchiveEntry entry in archive.Entries)
                {
                    if (entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase))
                    {
                        entry.ExtractToFile(Path.Combine(extractPath, entry.FullName));
                    }
                }
            } 
        }
    }
}


El ejemplo siguiente utiliza la clase de ZipArchive para tener acceso a un archivo .zip, y agregar un nuevo archivo al archivo comprimido. El nuevo archivo obtiene cifrado cuando se agrega al archivo .zip.


using System;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            using (FileStream zipToOpen = new FileStream(@"c:\users\exampleuser\release.zip", FileMode.Open))
            {
                using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
                {
                    ZipArchiveEntry readmeEntry = archive.CreateEntry("Readme.txt");
                    using (StreamWriter writer = new StreamWriter(readmeEntry.Open()))
                    {
                            writer.WriteLine("Information about this package.");
                            writer.WriteLine("========================");
                    }
                }
            }
        }
    }
}


También puede utilizar las clases de GZipStream y de DeflateStream para comprimir y descomprimir datos. utilizan el mismo algoritmo de compresión. Los objetos cifrados de GZipStream que se escriben en un archivo con una extensión .gz se pueden descomprimir utilizando muchas herramientas comunes además de los métodos proporcionados por GZipStream. En este ejemplo se muestra cómo comprimir y descomprimir un directorio de archivos mediante la clase GZipStream.


using System;
using System.IO;
using System.IO.Compression;

namespace zip
{
    public class Program
    {
        public static void Main()
        {
            string directoryPath = @"c:\users\public\reports";

            DirectoryInfo directorySelected = new DirectoryInfo(directoryPath);

            foreach (FileInfo fileToCompress in directorySelected.GetFiles())
            {
                Compress(fileToCompress);
            }

            foreach (FileInfo fileToDecompress in directorySelected.GetFiles("*.gz"))
            {
                Decompress(fileToDecompress);
            }
        }

        public static void Compress(FileInfo fileToCompress)
        {
            using (FileStream originalFileStream = fileToCompress.OpenRead())
            {
                if ((File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
                {
                    using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz"))
                    {
                        using (GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress))
                        {
                            originalFileStream.CopyTo(compressionStream);
                            Console.WriteLine("Compressed {0} from {1} to {2} bytes.",
                                fileToCompress.Name, fileToCompress.Length.ToString(), compressedFileStream.Length.ToString());
                        }
                    }
                }
            }
        }

        public static void Decompress(FileInfo fileToDecompress)
        {
            using (FileStream originalFileStream = fileToDecompress.OpenRead())
            {
                string currentFileName = fileToDecompress.FullName;
                string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length);

                using (FileStream decompressedFileStream = File.Create(newFileName))
                {
                    using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))
                    {
                        decompressionStream.CopyTo(decompressedFileStream);
                        Console.WriteLine("Decompressed: {0}", fileToDecompress.Name);
                    }
                }
            }
        }
    }
}


¿Te ha resultado útil?
(Caracteres restantes: 1500)
Gracias por sus comentarios

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft. Reservados todos los derechos.