Archiver un dossier en rar ou zip [Résolu]

Messages postés
18
Date d'inscription
lundi 16 mars 2009
Dernière intervention
14 juin 2009
- 11 juin 2009 à 09:11 - Dernière réponse :
Messages postés
18
Date d'inscription
lundi 16 mars 2009
Dernière intervention
14 juin 2009
- 14 juin 2009 à 21:21
Bonjour à tous je désir pouvoir archiver des dossier en c#.net j'ai essayer la compression mais cela ne marche pas pour les dossiers, mes dossier comporte plusieurs fichiers de tout type, je voudrai pouvoir archiver les dossiers pour les envoyer par la suite en un seul bloc.     Help me !!!!!
merci par avance .
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
835
Date d'inscription
samedi 15 novembre 2008
Dernière intervention
14 janvier 2017
14 juin 2009 à 09:20
3
Merci
bonjour,

je n'ai pas détaillé ton code, mais en voici un qui doit fonctionner:

//Stockera la derniere exception
public  Exception  LastException = null;
///<summary>
/// Compression d'un repertoire
///</summary>
///Nom de l'archive (full path)

///Nom du repertoire à compresser

///seulement le repertoire ou ses sous repertoires

///<returns>true si tout s'est bien passé, sinon false et positionnement de LastException</returns>
public  bool  CompressFolder( string  ZipFileName, string  folderRoot, System.IO.SearchOption  SearchOption )
{
   StringCollection  fileList = new  StringCollection() ;
   fileList.AddRange(Directory.GetFiles(folderRoot, "*.*", SearchOption));
   try
   {
      LastException = null;
      // création du fichier zip vide
      using (ZipOutputStream  MyZipOutputStream = new  ZipOutputStream(File.Open(ZipFileName, FileMode.OpenOrCreate)))
      {
         MyZipOutputStream.SetLevel(5);
         //Pour chaque fichier dans la liste
         foreach (string  sourceFileName  in  fileList)
         {
            //on enleve la racine du nom du fichier, pour avoir un chemin relatif
            // sinon le Zip generé sera illisible !!!
            string  zipFileName = sourceFileName.Replace(folderRoot, "");
            // création du fichier à l'interieur du zip
            MyZipOutputStream.PutNextEntry(new  ZipEntry(zipFileName)); 
            // on lit le fichier jusqu'à la fin par bloc de 4096 bytes
            using (FileStream  fs =  File.OpenRead(sourceFileName))
            {
               int IntSize;
               byte[]  data =  new  byte[4096]; 
               do
               {
                  IntSize = fs.Read(data, 0, data.Length);
                  MyZipOutputStream.Write(data, 0, IntSize);
               }while (IntSize > 0);
            }
         }
         MyZipOutputStream.Finish(); // on ferme le flux zip
      }
      return  true;
   }
   catch (Exception  ex)
   {
   LastException = ex;
   return  false;
   }
}

C# is amazing, enjoy it!

Merci cs_Robert33 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de cs_Robert33
Messages postés
835
Date d'inscription
samedi 15 novembre 2008
Dernière intervention
14 janvier 2017
13 juin 2009 à 23:29
0
Merci
Bonsoir,

Si tu n'as pas encore trouvé, regarde là : http://www.icsharpcode.net/OpenSource/SharpZipLib/
C'est un librairie open source qui permet de compresser/décompresser des fichiers ou des repertoires.

C# is amazing, enjoy it!
Commenter la réponse de cs_Robert33
Messages postés
18
Date d'inscription
lundi 16 mars 2009
Dernière intervention
14 juin 2009
14 juin 2009 à 00:00
0
Merci
merci pour l'info j'ai realisé ce code avec mais sa ne marche pas si tu a une idée ??

string[] files = Directory.GetFiles(cheminSource);
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();
Commenter la réponse de jululu
Messages postés
18
Date d'inscription
lundi 16 mars 2009
Dernière intervention
14 juin 2009
14 juin 2009 à 21:21
0
Merci
Super merci beaucoup sa marche super :)
Commenter la réponse de jululu

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.