Compression / Décompression en .NET
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;
}