Compression zip

Soyez le premier à donner votre avis sur cette source.

Vue 22 459 fois - Téléchargée 1 674 fois

Description

Ce prog permet d'extraire les fichiers et/ou dossiers d'une archive zip
Il peut etre remodeler pour traiter en compression et decompression les format : ZIP, TAR, BZIP2 et GZIP
Je n'ai poster ici que la decompression, je vous laisse le plaisir de decouvrir la compression, qui n'est pas plus compliquer.

Etant donner que le framework n'est pas doter de fonction pour ce genre de traitements, une librairie externe, que vous pouvez telecharger a cet endroit, a été ajoutée comme référence à la solution

http://www.icsharpcode.net/OpenSource/SharpZipLib/default.asp

Source / Exemple :


...
void ExtractArchive(string zipFilename,string extractDir)
{
	ZipInputStream zis = null;
	FileStream fos = null;

	try
	{
		zis = new ZipInputStream(new FileStream(zipFilename,FileMode.Open,FileAccess.Read));
		ZipEntry ze;

		// on dezippe tout dans un rep du nom du zip, pas en bordel
		Directory.CreateDirectory(extractDir);

		while ((ze = zis.GetNextEntry()) != null)
		{
			if (ze.IsDirectory)
			{
				Directory.CreateDirectory(extractDir+"\\"+ze.Name);
			}
			else
			{
				if (!Directory.Exists(extractDir+"\\"+Path.GetDirectoryName(ze.Name)))
				{
					Directory.CreateDirectory(extractDir+"\\"+Path.GetDirectoryName(ze.Name));
				}

				fos = new FileStream(extractDir+"\\"+ze.Name,FileMode.Create,FileAccess.Write);
				int count;
				byte[] buffer= new byte[4096];

				while ((count = zis.Read(buffer,0,4096)) > 0)
				{
					fos.Write(buffer,0,count);
				}
			}
		}
	}
	finally
	{
		if (zis != null) zis.Close();
		if (fos != null) fos.Close();
	}
}
...

Conclusion :


Double Cliquez sur un fichier dans la ListView -> un message apparait vous demandant de confirmer l'extraction.
Si vous cliquez : OUI l'archive sera extraite dans un dossier du meme nom dans le meme repertoire.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
18
Date d'inscription
lundi 16 mars 2009
Statut
Membre
Dernière intervention
14 juin 2009

Bonjour a tous, Une petite question désolé je sui un vrai bouler comment fait t'on pour la compression de dossier ?? j'ai utilisé le code suivant il m'afiche aucune erreur mais je n'ai pas mon dossier .zip a la sortie :( si vous pouviez me filé un cou de main merci :)

string[] files = Directory.GetFiles(cheminDossier);
string ZipName = "monZip.zip";

// Flux qui va créer l'archive
ZipOutputStream ZipStream = new ZipOutputStream(File.Create(ZipName));

// On indique le niveau d ecompression
// 0 -> Compression minimale
// 9 -> Compression maximale
ZipStream.SetLevel(0);

// Pour chaque fichier
foreach (string file in files)
{
// On récupère le chemin + nom du fichier
string file_tozip = file;

// Stream qui va lire le fichier
FileStream fs = File.OpenRead(file_tozip);
// Tableau de byte, de la taille du fichier à lire
byte[] buffer = new byte[fs.Length];
// Lecture
fs.Read(buffer, 0, buffer.Length);
// On crée une nouvelle entrée dans l'archive
ZipEntry entry = new ZipEntry(Path.GetFileName(file_tozip));
// On ajoute la nouvelle entrée
ZipStream.PutNextEntry(entry);
ZipStream.Write(buffer, 0, buffer.Length);

//On ferme le flux de lecture
fs.Close();

}
// On ferme le flux
ZipStream.Finish();
ZipStream.Close();
Messages postés
2
Date d'inscription
lundi 7 juin 2004
Statut
Membre
Dernière intervention
19 octobre 2006

Lors de la lecture des rep dans le zip, le caractere: 'î' est lut comme ça: '/f', la creation du reperoire tombe alors en erreur. Avez vous une solution ?

Merci
Messages postés
1
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
15 mars 2004

Salut
j'ai besoin d'un petit renseignement. je compresse un repertoire entier et ca marche super bien.
Je voudrai juste savoir comment implémenter le degré de compression que je souhaite(pour augmenter la reduction de la taille de mon zip).
Est-ce que c'est possible ?
Messages postés
656
Date d'inscription
mercredi 22 août 2001
Statut
Membre
Dernière intervention
11 mars 2005
12
exact, j'avais pas fait gaffe, oups :)
Messages postés
56
Date d'inscription
lundi 7 juillet 2003
Statut
Membre
Dernière intervention
14 novembre 2007

un petit bug, il faut refermer tous les streams ouverts.
Il faut rajouter :
if(fos != null){ fos.Close(); }
avant de faire :
fos = new FileStream(...);

sinon tous les fichiers dézippés (sauf le dernier) sont lockés jusqu'à la fermeture du programme.
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.