IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VC++ .NET Discussion :

compression de dossiers


Sujet :

VC++ .NET

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut compression de dossiers
    Bonjour,
    dans ce code de la faq :
    http://dotnet.developpez.com/faq/cpp...ge=compression

    je peux compresser et decompresser des fichiers
    serait il possible de compresser et decompresser des dossiers ??

    au lieu de "FileStream" qu'est ce que je peux mettre pour pouvoir accéder à des dossiers
    j'ai testé "FolderStream" mais ca existe pas !
    est ce quelqu'un a une idée comment accéder à des dossiers ??

    merci d'avance

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    tu dois faire tous les fichiers un par un

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    donc un dossier ce n'est possible de le compresser ??

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    non, pas de cette facon

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    peux tu préciser stp
    comment je pourrais donc compresser un dossier? en compressant chaque fichier du fichier tout seul?

    par exemple un dossier d1 est constitué de 2 fichiers f1 et f2
    je peux le compressant en comressant f1 en f1.zp et f2 en f2.zp
    je peux pas avoir un d1.zp où les 2 fichiers sont archivés (comme winrar)?

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    tu peux t'inspirer de ca
    http://msdn2.microsoft.com/en-us/library/ywf6dxhx.aspx
    ok c'est en c#, mais faut parler le c# aujourd'hui

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    j'ai vu le lien que tu m'a donné ..il n y a pas de code en C# pour compresser des dossiers!
    par contre j'ai trouvé un exemple mais c'est pour compresser des fichiers et non des dossiers

  8. #8
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    c'est bon j'ai trouvé !
    mais c'est en C#, je dois tt convertir en Visual C++??
    je peux peut etre utiliser quelques fonctions?
    zipreader et zipwriter sont suffisant ? j'ai pas compris les autres classes elles servent à quoi?

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    Bon ca me parait trop compliqué
    ce que je vais faire obtenir la liste des fichiers existents dans le répertoire en utilisant le code de la faq
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    static void Dir(String ^directory)
    {
    	array<String ^> ^ files;
     
    	// pour avoir les noms des fichiers et sous-répertoires
    	files = Directory::GetFileSystemEntries(directory);
     
    	for each (String ^file in files)
    		Console::WriteLine(file);
    }
    et après compresser tous ces fichiers un par un et puis mettre les fichiers compressés dans un nouveau répertoire
    par contre créer un répertoire est ce que t a une idée comment on peut faire ??

    merci d'avance

  10. #10
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    voilà ce que je veux faire c'est créer un répertoire avec le meme chemin que le repertoire que je veux compresser , le repertoire où je vais mettre les fichiers compressés aura le meme nom sauf à la fin je lui ajoute "compressed" pour le distinguer du repertoire d'origine
    après je veux créer pour chaque fichier dans le repertoire d'origine son coresspondant dans le repertoire "compressed"

    voici le code que je veux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    static void Dir(String ^directory)
    {
    	array<String ^> ^ files;
     
     
    	files = Directory::GetFileSystemEntries(directory);
              d =System::IO::Directory::CreateDirectory(directory+"compressed");
     
    	for each (String ^file in files)
    	{
    		String ^v= file-directory
     
    		FileStream ^fs = File::Create(d+"\\"+v);
                             compresserFichier(file,d+"\\"+v)
     
    		fs->Close();
    	}
    }
    j'ai un petit souci je sais que c'est simple ..comment avoir le différence de deux string ??? pour avoir le string v (file-directory)
    une autre question ce d:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d =System::IO::Directory::CreateDirectory(directory+"compressed");
    il est de quel type c'est un repertoire? ou un string où dedans il y a le chemin du repertoire ?

    merci d'avance

  11. #11
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    j'ai crée une form avec un boutton lorsque je clique sur ce boutton je dois compresser le repertoire "C:\\test" et mettre le repertoire compressé dans le repertoire "C:\\test"


    voici mtnt mon nouveau code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    private : String ^directory;
    	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    	 directory = "C:\\test";
     
    	array<String ^> ^ files;
    	files = Directory::GetFileSystemEntries(directory);
    	System::IO::Directory::CreateDirectory(directory+"compressed");
     
    	for each (String ^file in files)
    	{
     
    		String ^v= file->Remove(directory->Length);
     
    		FileStream ^fs = File::Create(directory+"compressed"+v);
     
    		compresserFichier(file, directory+"compressed"+v);
     
    		fs->Close();
    	}
    mais il me genere cette exception :
    An unhandled exception of type 'System.NotSupportedException' occurred in mscorlib.dll

    Additional information: The given path's format is not supported.
    est ce quelqu'un a une idée comment résoudre ce pb ?

    merci

  12. #12
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    mtnt il me génere le répertoire "c:\mydircompressed" mais dedand le fichier test.gz est vide !

    voici mon nouveau code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    private : String ^path;
    	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    	 path = "C:\\mydir";
     
    	array<String ^> ^ files;
    	files = Directory::GetFileSystemEntries(path);
    	DirectoryInfo^ di = Directory::CreateDirectory("C:\\mydircompressed");
     
    	for each (String ^file in files)
    	{
     
     
    		FileStream ^fs = File::Create(path+"compressed"+"\\test.gz");
     
    		compresserFichier(file, fs->Name);
     
    		fs->Close();
    	}

  13. #13
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    pour une fois je me réponds moi même (il faut le faire au moins une fois dans sa vie )

    je recupérais pas le bon fichier(fichier inexistent) donc c'est normal que j'ai un truc vide
    et ce n'était pas la peine d'ouvrir un filestream puisque je le fais dans ma fct compresserfichier
    voila mon nouveau code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for each (String ^file in files)
    	{ 
    		String ^v= file->Substring(path->Length);
    		System::Windows::Forms::MessageBox::Show(v);
     
    		//FileStream ^fs = File::Create(path+"compressed"+v);
    		//FileStream ^fs = File::Create(path+"compressed"+"\\test.gz");
    		//fs->Close();
    		String ^pathnew = path+"compressed";
    		if (!compresserFichier(file, pathnew+v+".gz"))
    				Console::WriteLine("failure in compression");

  14. #14
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut tester sur le chemin pour savoir si c'est un fichier ou un dossier (directory)
    par contre j'ai une question

    mtnt je peux compresser un dossier D1 contenant des fichiers f1, f2,...
    en un dossier D1compressed contenant des fichiers f1.gz,f2.gz,...

    mais s'il y a d'autres dossiers D2 dans D1 il fait rien
    donc ce que je veux c'est tester si c'est un dossier ou un fichier
    est ce que quelqu'un a une idée comment faire ??

    merci d'avance

  15. #15
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    le parcours de répertoire se fait avec une fonction récursive

  16. #16
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    j'y ai pensé, d'ailleurs ce que je veux faire c'est faire la compression en remontant
    par exemple j'ai un dossier d0 contenant d1 et d2 et f1
    et d1 contien f11 et d11 et d2 contient f21 et f22
    et d11 contient f111 et f112
    je compresse d11, puis d1 et d2 puis d0

    est ce que t'as un exemple d'algorithme qui me liste les répertoires et les fichiers que contienne le repertoire d0 ??

    merci d'avance

  17. #17
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    y a un exemple dans la faq VC, à adapter http://c.developpez.com/faq/vc/?page...s#SizeofFolder

  18. #18
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    Franchement, j'ai essayé de comprendre le code mais je n'y suis pas arrivé
    est ce que tu n'as pas un code un peu plus simple

    merci d'avance

  19. #19
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    purée, quand je pense que j'allais le refaire ...
    y a dans la faq c++/cli http://dotnet.developpez.com/faq/cpp...#listDirectory

  20. #20
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    merci

    ca correspond à quoi le" int indent "?

Discussions similaires

  1. [Débutant][C#] Compression de dossier de manière récurssive
    Par LordProgz dans le forum Windows Forms
    Réponses: 10
    Dernier message: 12/01/2010, 13h55
  2. Compression de dossiers avec Abbrevia
    Par Badrouta dans le forum Delphi
    Réponses: 4
    Dernier message: 27/01/2007, 08h45
  3. [Windows] Compresser un dossier en .tgz
    Par Nicotendo dans le forum Autres Logiciels
    Réponses: 6
    Dernier message: 18/12/2006, 13h15
  4. Compresser un dossier avec Compress::Zlib
    Par mobscene dans le forum Modules
    Réponses: 1
    Dernier message: 17/11/2006, 21h13
  5. compresser un dossier
    Par kevain_09 dans le forum VBScript
    Réponses: 3
    Dernier message: 07/09/2006, 18h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo