Archiver un dossier en rar ou zip

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

4 réponses

cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
14 juin 2009 à 09:20
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!
3
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
13 juin 2009 à 23:29
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!
0
jululu Messages postés 18 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 14 juin 2009
14 juin 2009 à 00:00
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();
0
jululu Messages postés 18 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 14 juin 2009
14 juin 2009 à 21:21
Super merci beaucoup sa marche super :)
0