Annonce

Réduire
Aucune annonce.

"Masse Fichier" C++

Réduire
X
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • "Masse Fichier" C++

    Salut !
    Petit programme que j'ai créer en C++, il n'a qu'un but:

    Créer Beaucoup de fichier d'une taille de 20 Mo chacun.

    Je veux connaitre vos avis, ou des idée pour améliorer ce petit programme !

    Code:
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <time.h>
    #include <stdlib.h>
    using namespace std;
    
    
    
    string melange(string mot)//mélange le nom du fichier (Merci OpenClassroom pour la fonction)
    {
       string melange;
       int position(0);
       while (mot.size() != 0)
       {
          position = rand() % mot.size();
          melange += mot[position];
            mot.erase(position, 1);
        }
    
       return melange;
    }
    
    
    
    
    
    int main()
    {
        int compteur(0),compteur2(0);
        string nom("TEMMIE           "),temp;
        
    
    
    
    
        while(compteur != 200)
        {
        //200 Fichiers
    
    
        temp =melange(nom) +".txt" ; //on ramène à la fonction "melange" pour qu'elle puisse créer plusieurs fichiers différents
        cout << temp<<endl;
        ofstream oflux1(temp.c_str(),ios::app);
    
    
    
        while(compteur2 != 1000000) // 20Mo par fichier
        {
    
        oflux1 << "Hoi !!! I'm Tem !!!"<<endl;//le message
        compteur2++;
    
        }
    
        compteur2 = 0;
        oflux1.close();
        compteur++;
        }
    
    
    
        return 0;
    }
    (Malheureusement) Je suis encore débutant, je ne pourrais accéder au conseil technique des plus avisé (si ils m'en donnent) .

    Merci d'avance .

  • #2
    Bonjour,

    C'est vrai que ce programme n'a pas trop d'intérêts...

    Concernant le code ce qui me choque, c'est l'indentation !

    Le manque de rigueur au niveau des espacements entre les divers opérateurs (flux, =, ...)

    Puis, si on regarde bien, on pourrait très bien demander à l'utilisateur le nombre de fichiers à créer (en paramètre du fichier exécuté).

    Et comme on connaît déjà le nombre de fichiers à créer, l'utilisation de la boucle for me semble plus adapté !

    Donc effectivement, même sur ce programme, on peut dire qu'il y a encore du boulot

    Commentaire


    • #3
      Merci de tes conseils !

      Je travaille en ce moment sur la version au dessus et tes conseils vont l'améliorer, je vais faire de mon mieux ^^ !

      (je publierai la nouvelle version ici )

      Commentaire


      • #4
        Ok,

        Voilà ma contribution en C, sachant que je n'ai créé que la fonction, pas le programme permettant de gérer les paramètres du fichier à exécuter.
        J'ai pas vérifié les fuites mémoires, bref rapidement fait quoi

        Code:
        #include <stdio.h>
        #include <stdlib.h>
        #include <string.h>
        
        void create(const char *name, int size, int n);
        
        int main(void){
        
            create("test", 20000000, 3); /* 3 fichiers de 20Mo nommés test0, test1 et test2 */
        
            return 0;
        }
        
        void create(const char *name, int size, int n){
        
            int ind, i;
            char format[32]="";
            char str_format[32]="";
            char *obj = malloc(size);
            if (obj == NULL) exit(EXIT_FAILURE);
        
            for (i=0; i<size; i++)
                obj[i] = ' ';
        
            obj[size-1] = '\0';
        
            strcpy(format, name);
            strcat(format, "%d");
        
            for (ind=0; ind<n; ind++){
                sprintf(str_format, format, ind);
                FILE *f = fopen(str_format, "wb");
                if (f==NULL) exit(EXIT_FAILURE);
        
                fseek(f, (long int)size, SEEK_SET);
                fwrite(obj, sizeof(char), sizeof(obj), f);
                fclose(f);
            }
        
            free(obj);
        
        }
        Dernière modification par fred, 19 mars 2017, 10h20.

        Commentaire


        • #5
          Merci de ta contrib faut vraiment que je me penche plus sur le C avant le C++ ...
          Il y a un programme en C++ qui dit "Crée X fichier de 20Mo" au lieu de "écrit dans X fichier jusqu'à que les 20 Mo sont atteint " ?
          le premier (le tien mais en C) est le meilleur car plus rapide que le deuxième .
          Faut que je trouve le premier sinon je vais faire du surplace un moment .
          Dernière modification par HEB, 25 mars 2017, 13h36.

          Commentaire


          • #6
            Le 1er est effectivement et logiquement plus rapide, car tu ne réitères pas sur le répertoire pour trouver tes fichiers et les remplir.

            Ensuite le faire en C++ avec l'aide de mon code C (c'est aussi pour cela que je l'ai créé), doit être faisable, je te laisse chercher un peu.

            Commentaire


            • #7
              Souhaite moi bonne chance. Si je trouve pas, il faudra vraiment que je me remette au C .
              Merci de m'avoir aidé .

              Commentaire


              • #8
                En C++ c'est beaucoup plus court et simple,

                Code:
                #include <iostream>
                #include <fstream>
                #include <string>
                
                using namespace std;
                
                void create(string const &name, int size, int n);
                
                int main(void){
                
                    create("test", 20000000, 3);
                
                    return 0;
                }
                
                void create(string const &name, int size, int n){
                
                    string obj (size, ' ');
                    ofstream f;
                
                    for (int ind=0; ind<n; ind++){
                        f.open(name+to_string(ind));
                        f << obj;
                        f.close();
                    }
                
                }
                et on en parle plus (par contre compiler avec C++11

                Code:
                g++ -std=c++11 test.cpp -o test
                Bonne journée,
                Dernière modification par fred, 27 mars 2017, 07h28.

                Commentaire


                • #9
                  Merci de ton aide !

                  Commentaire

                  Chargement...
                  X