FAQ C++/CLI et VC++.NetConsultez toutes les FAQ

Nombre d'auteurs : 29, nombre de questions : 248, création le 22 février 2013 

 
OuvrirSommaireIntéraction du C++/CLI avec le framework .NetFichiers, Répertoires, DisquesCompression

Tout d'abord pensez à ajouter ces deux namespaces sans quoi il n'est pas possible d'utiliser le code donné en exemple.

 
Sélectionnez

using namespace System::IO;
using namespace System::IO::Compression;
				

Avec cet exemple il vous suffit juste de passer en paramètres le chemin complet du fichier à compresser, et ensuite le chemin de destination du fichier GZip qui va être crée.

 
Sélectionnez

bool compresserFichier(String ^cheminSource, String ^cheminDestination)
{
    /* cheminSource : chemin complet du fichier à compresser
    cheminDestination : chemin complet du fichier compressé à créer*/
    try
    {
        // Le fichier est placé dans le FileStream
        FileStream ^ monFileStream = gcnew FileStream(cheminSource, FileMode::Open);
        cli::array<unsigned char,1> ^ monBuffer = gcnew cli::array<unsigned char>(safe_cast<int>(monFileStream->Length));
        // Lecture de l'intégralité du FileStream
        monFileStream->Read(monBuffer, 0, safe_cast<int>(monFileStream->Length));
        // Fermeture du FileStream
        monFileStream->Close();
        // Création du fichier qui va contenir le fichier compressé
        monFileStream = gcnew FileStream(cheminDestination, FileMode::Create);
        // Compression des données
        GZipStream ^monGZipStream = gcnew GZipStream(monFileStream, CompressionMode::Compress, false);
        // Ecriture des données compressées dans le fichier de destination
        monGZipStream->Write(monBuffer, 0, monBuffer->Length);
        // Fermeture du GZipStream
        monGZipStream->Close();
        return true;
    }
    catch(Exception ^e)
    {
        Console::WriteLine(e->Message);
        return false;
    }
}				
			
Créé le 9 mai 2006  par Webman

Lien : System.IO.Compression

Tout d'abord pensez à ajouter ces deux namespaces sans quoi il n'est pas possible d'utiliser le code donné en exemple.

 
Sélectionnez

using namespace System::IO;
using namespace System::IO::Compression;
				

Avec cet exemple il vous suffit juste de passer en paramètres le chemin complet du fichier GZip à décompresser, et ensuite le chemin de destination du fichier qui va être décompressé.

 
Sélectionnez

bool decompression(String ^cheminSource, String ^ cheminDestination)
{
    /*cheminSource : chemin complet du fichier compressé
    cheminDestination : chemin complet du fichier  le fichier doit être décompressé*/
    try
    {
        // Lecture du fichier compresse
        FileStream ^monFileStream = gcnew FileStream(cheminSource, FileMode::Open);
        // Données du fichier placées dans un GZipStream
        GZipStream ^monGzipStream = gcnew GZipStream(monFileStream, CompressionMode::Decompress);
        // Tableau qui va contenir la taille du fichier
        array <unsigned char> ^tailleOctets = gcnew array<unsigned char>(4);
        // Positionnement dans le Stream pour récupérer la taille
        int position = safe_cast<int>(monFileStream->Length) - 4;
        monFileStream->Position = position;
        // Récupération de la taille du fichier
        monFileStream->Read(tailleOctets, 0, 4);
        // Repositionnement en début du Stream
        monFileStream->Position = 0;
        // Conversion de la taille du fichier en entier
        int tailleFichier = BitConverter::ToInt32(tailleOctets, 0);
        // Dimesionnement du buffer
        array<unsigned char> ^buffer = gcnew array<unsigned char>(tailleFichier + 100);
        // Offset qui permettra de se repérer dans le Stream
        int monOffset = 0;
 
        while (true)
        {
            // Les données sont décompressées et placées dans le buffer
            int decompressionOctets = monGzipStream->Read(buffer, monOffset, 100);
            // Tant qu'il reste des données on continue
            if (!decompressionOctets)
                break;
            //  On icrémente l'offset pour ne pas repartir de 0 à chaque fois...
            monOffset += decompressionOctets;
         }
 
        // Création du fichier décompressé
        monFileStream = gcnew FileStream(cheminDestination, FileMode::Create);
        // Ecriture des données décomrpessées dans le fichier
        monFileStream->Write(buffer, 0, tailleFichier);
        // Efface les données en mémoire tampon
        monFileStream->Flush();
        // Fermeture des Streams
        monFileStream->Close();
        monGzipStream->Close();
        return true;
    }
    catch(Exception ^e)
    {
        Console::WriteLine(e->Message);
        return false;
    }
}		
			
Créé le 9 mai 2006  par Webman

Lien : System.IO.Compression

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2006-2007 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.