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

jululu 18 Messages postés lundi 16 mars 2009Date d'inscription 14 juin 2009 Dernière intervention - 11 juin 2009 à 09:11 - Dernière réponse : jululu 18 Messages postés lundi 16 mars 2009Date d'inscription 14 juin 2009 Dernière intervention
- 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 

4 réponses

Répondre au sujet
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 14 juin 2009 à 09:20
+3
Utile
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!
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Robert33
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 13 juin 2009 à 23:29
0
Utile
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
jululu 18 Messages postés lundi 16 mars 2009Date d'inscription 14 juin 2009 Dernière intervention - 14 juin 2009 à 00:00
0
Utile
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
jululu 18 Messages postés lundi 16 mars 2009Date d'inscription 14 juin 2009 Dernière intervention - 14 juin 2009 à 21:21
0
Utile
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.