Compression / Décompression en .NET

Publié le par Chief

Une des nouveautés intéressante du framework .net v2, il est possible de zipper et de dézipper de manière assez simple les fichier de type Gzip. Cependant, lorsqu'il s'agit d'un fichier plus classique de type ZIP, l'algorithme de compression / décompression pose problème.

C'est pour cela qu'un groupe de développeur à créé une DLL qui permet de compresser et décompresser les fichier ZIP, GZIP, TAR et BZIP2. Pour cela, il vous faut récupérer la DLL suivante à intégrer ensuite dans votre projet:
Référence - Clic Droit - Ajouter une référence et spécifier la DLL téléchargée.

Afin de faciliter la tâche de décompression d'un fichier ZIP et de ne pas vous emmeler avec les FileStream, ZipStream et autre déclarations, ce petit bout de code vous permet de spécifier le fichier d'entrée en string et vous décompresse tous les fichiers de ce zip.
En sortie du programme, un arraylist contient tous les fichiers du zip extrait.

Tous les traitements sont maintenant beaucoup plus simple avec un fichier extrait!



using System.IO;

using System.Collections;

using ICSharpCode.SharpZipLib.Zip;

................
................

        public static ArrayList Unzip(string strFileName, string strExtractTo)

        {

            Stream stream = System.IO.File.OpenRead(strFileName);

            return Unzip(stream, strExtractTo);

        }

 

        public static ArrayList Unzip(Stream stream, string strPathToExtract)

        {

            ArrayList a_FileList = new ArrayList();

            ZipInputStream s = new ZipInputStream(stream);

            ZipEntry theEntry;

            while ((theEntry = s.GetNextEntry()) != null)

            {

                string directoryName = System.IO.Path.GetDirectoryName(theEntry.Name);

                string fileName = System.IO.Path.GetFileName(theEntry.Name);

 

                Directory.CreateDirectory(strPathToExtract + directoryName);

                if (fileName != String.Empty)

                {

                    FileStream streamWriter = System.IO.File.Create(strPathToExtract + "" + theEntry.Name);

 

                    int size = 2048;

                    byte[] data = new byte[2048];

                    while (true)

                    {

                        size = s.Read(data, 0, data.Length);

                        if (size > 0)

                        {

                            streamWriter.Write(data, 0, size);

                        }

                        else

                        {

                            break;

                        }

                    }

 

                    streamWriter.Close();

 

                    // Set date and time

                    System.IO.File.SetCreationTime(strPathToExtract + "" + theEntry.Name, theEntry.DateTime);

                    System.IO.File.SetLastAccessTime(strPathToExtract + "" + theEntry.Name, theEntry.DateTime);

                    System.IO.File.SetLastWriteTime(strPathToExtract + "" + theEntry.Name, theEntry.DateTime);

                    a_FileList.Add(theEntry.Name); 

                }

 

            }

            s.Close();

 

            return a_FileList;

        }


Publicité

Publié dans .NET

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article