jululu
Messages postés18Date d'inscriptionlundi 16 mars 2009StatutMembreDernière intervention14 juin 2009
-
11 juin 2009 à 09:11
jululu
Messages postés18Date d'inscriptionlundi 16 mars 2009StatutMembreDernière intervention14 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 .
cs_Robert33
Messages postés834Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention14 janvier 201733 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;
}
}
// 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();