Partage
  • Partager sur Facebook
  • Partager sur Twitter

creation de fichier multiple

Sujet résolu
    16 février 2022 à 23:16:35

    Bonjour tout le monde , j'essai de crée en c un programme qui cherche dans un fichier des nom de fichier et s'en sert pour les crée

    pour l'instant j'ai réussi a extraire les noms dans les fichiers mais  je n'arrive pas a en crée plus de 1 :(

    merci pour votre aide

    voici mon code

    #include <stdio.h>
    
    #include <stdlib.h>
    
    #include <string.h>
    
    int main (int argc, char *argv[])
    
                  {
                      FILE* ptr =NULL;
    
                      char str[80];
    
                      int i;
    
        if (argc > 1)
    
                       {
    
            ptr = fopen (argv[1], "r"); 
    
                       }
    
        if (argc < 2)
    
                 {
    
    printf ("pas d'aide");
    
                 }
    
      if (argc > 2)
    
                 {
    
    printf ("trop d'aide'");
    
                 }
    
             if (ptr != NULL)
    
                 {  
    
        while (fgets(str, 80, ptr) != NULL)
    { char * slashPos = strrchr( str, '\\' ); for(i = 0 ; slashPos[i] ; i++) slashPos[i] = slashPos[i+1]; FILE* fichier = NULL; printf("%s",slashPos); fichier = fopen(slashPos, "w"); sleep (1); fputs("0101010101010",fichier); fclose(fichier); } } return (0); }


    le fichier que j'essai de traiter s'appelle test.txt , je le met en paramètres 
    C:\Users\david\Documents\un.txt
    C:\Users\david\Documents\deux.txt
    C:\Users\david\Documents\trois.txt
    C:\Users\david\Documents\quatre.txt
    C:\Users\david\Documents\cinq.txt
    C:\Users\david\Documents\six.txt

    -
    Edité par David Caldan 17 février 2022 à 0:02:44

    • Partager sur Facebook
    • Partager sur Twitter
      16 février 2022 à 23:56:02

      Hello,

      Ton code est illisible.


      Indente-le convenablement et supprime toutes les lignes vides non-nécessaires.

      -
      Edité par edgarjacobs 16 février 2022 à 23:57:31

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        17 février 2022 à 0:04:15

        merci pour le conseil , j'ai modifier comme j'ai pu :)

        j'essai que le programme extrait le nom des fichier  dans le fichier et qu'il les crée 1 par 1

        -
        Edité par David Caldan 17 février 2022 à 0:06:06

        • Partager sur Facebook
        • Partager sur Twitter
          17 février 2022 à 1:23:35

          La cause de ton problème est que fgets met dans le buffer le caractère de fin de ligne '\n' s'il y en a un.

          Il faut donc l'enlever pour faire un nom de fichier correct. (ce caractère n'est pas accepté pour un nom de fichier) !

          PS : Tu aurait quand même pu faire un effort pour l'indentation de ton code !

          • Partager sur Facebook
          • Partager sur Twitter
          ...
            17 février 2022 à 2:46:27

            Sur Windows, la longueur du nom des fichiers peut aller jusqu'à 260 caractères, 80 ce n'est pas assez.

            Je mettrais 262 (+1 pour le '\n', +1 pour le '\0' ajouté par fgets)
            Tu pourrais utiliser strchr pour trouver le '\n' et l'effacer.
            Pourquoi décaler  tous les éléments après slashPos? Avances ton pointeur de 1, tu vas sauter le '\'
            Tu ne vérifies pas si tes fichiers en écriture s'ouvrent correctement avec fopen.
            Tu pourrais utiliser perror


            https://zestedesavoir.com/tutoriels/755/le-langage-c-1/1043_aggregats-memoire-et-fichiers/5155_la-gestion-derreur-2/


            Pourquoi le sleep?

            -
            Edité par PierrotLeFou 17 février 2022 à 3:11:11

            • Partager sur Facebook
            • Partager sur Twitter

            Le Tout est souvent plus grand que la somme de ses parties.

              17 février 2022 à 9:04:08

              Sur Windows on peut trouver des fonctions prêtes à l'emploi permettant d'extraire des éléments d'un chemin (path)

              #include <stdio.h>
              #include <stdlib.h>
              
              int main(void)
              {
                char drive[_MAX_DRIVE] = {0};
                char dir[_MAX_DIR] = {0};
                char fname[_MAX_FNAME] = {0};
                char ext[_MAX_EXT] = {0};
              
                _splitpath("C:\\Users\\david\\Documents\\un.txt", drive, dir, fname, ext);
              
                printf( "Drive   : %s\n", drive);
                printf( "Dir     : %s\n", dir);
                printf( "Filename: %s\n", fname);
                printf( "Ext     : %s\n", ext);
              }
              #include <stdio.h>
              #include <shlwapi.h> //Link: shlwapi.lib ou libshlwapi.a
              
              int main(void)
              {
                puts(PathFindFileName("C:\\Users\\david\\Documents\\un.txt"));
              }


              C'est un peu 'overkill' mais sait-on jamais ...

              -
              Edité par magma 17 février 2022 à 9:08:59

              • Partager sur Facebook
              • Partager sur Twitter
                17 février 2022 à 14:56:05

                merci pour toute vos réponse :) , jai enlever le /n , puis augmenter les valeurs max et sa marche :))

                merci Rouloude et désoler pour l'indentation, je suis vraiment pas fort a sa :(

                pour pierrotlefou , jai decaler parce que je connaissai pas autre chose et pour perror , jai pas encore appris :(, merci pour le tuto 

                et pour magma , je ne savais pas que l'on pouvais utiliser les fonction windows comme sa , mais c super intéressant :)

                 si dessous , mon code actuel avec probleme resolu , compile sur dev c++:D

                #include <stdio.h>
                #include <stdlib.h>
                #include <string.h>
                
                
                int main (int argc, char *argv[])
                          {
                    
                	
                                  FILE* ptr =NULL;
                                  char str[250];
                                  int i;
                                  int len_result;
                   	              
                    
                    if (argc > 1)
                                       {
                        ptr = fopen (argv[1], "a+");
                		fputs("0",ptr);
                        fclose(ptr);
                        ptr = fopen (argv[1], "r");
                        
                        
                                       }
                                       
                                    
                    if (argc < 2)
                
                {
                	printf ("pas d'aide");
                }
                
                  if (argc > 2)
                
                {
                	printf ("trop d'aide'");
                }
                
                
                
                
                    
                
                         if (ptr != NULL)
                                       {  
                    while (fgets(str, 250, ptr) != NULL) {
                        
                				
                		char * slashPos = strrchr( str, '\\' );
                		for(i = 0 ; slashPos[i] ; i++)
                        slashPos[i] = slashPos[i+1];
                		
                		len_result = strlen(slashPos);
                 
                        slashPos[(len_result - 1)] = '\0';
                		FILE* fichier = NULL;
                		printf("%s",slashPos);
                		
                
                		fichier = fopen(slashPos, "w");
                		
                		fputs("001111001",fichier);
                		
                		fclose(fichier);
                		
                		}
                    }
                   return (0);
                }



                • Partager sur Facebook
                • Partager sur Twitter
                  17 février 2022 à 15:16:55

                  Au début tu testes si ptr == NULL ou pas, Pourquoi?
                  Pour savoir s'il a été ouvert.
                  Tu peux faire la même chose avec les fichiers en écriture. Tu testes si le pointeur fichier est NULL ou pas.

                  Pour slashPos, tu fais slashPos++ au lieu de la boucle.

                  -
                  Edité par PierrotLeFou 17 février 2022 à 15:19:17

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Le Tout est souvent plus grand que la somme de ses parties.

                    17 février 2022 à 15:23:43

                    oui , c pour savoir si le fichier avait été ouvert , et oui, super bonne idée pour le slashPos++ , sa sera plus clair en plus , deja que je suis assez confus dans mon code :euh:

                    fini les problème d'indentation, je vient de voir que code blocks possède un plugins pour le faire en auto :magicien:

                    -
                    Edité par David Caldan 17 février 2022 à 15:26:40

                    • Partager sur Facebook
                    • Partager sur Twitter

                    creation de fichier multiple

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown