Partage
  • Partager sur Facebook
  • Partager sur Twitter

programme de copie

Anonyme
    8 juin 2006 à 14:33:43

    bonjour a tous je vien de realiser un programme qui devrait :D copier les fichiers demandes.

    sauf qu'il n'arrive a copier que les .txt pouvait me dire ce qu'il se passe?

    je vous laisse examiner mon code :) :


    #include <stdio.h>
    #include <stdlib.h>
    #define TAILLE_MAX 5000

    int main(int argc, char *argv[])
    {
      char chainenom[100];
      char chainenouveaunom[100];
      char chaine[TAILLE_MAX] = "";
       
      printf ("nom du fichier : ");
      scanf ("%s", &chainenom);
      printf ("nom du nouveau fichier : ");
      scanf ("%s", &chainenouveaunom);
      printf ("le nom du fichier : %s\n\n", chainenom);

        FILE* fichier = NULL;
     
        fichier = fopen(chainenom, "r");

        if (fichier != NULL)
        {
            fgets(chaine, TAILLE_MAX, fichier); // On lit maximum TAILLE_MAX caractères du fichier, on stocke le tout dans "chaine"
            printf("%s\n\n", chaine); // On affiche la chaîne

            fclose(fichier);
        }
       
        fichier = fopen(chainenouveaunom, "w");

        if (fichier != NULL)
        {
            fputs(chaine, fichier); // On lit maximum TAILLE_MAX caractères du fichier, on stocke le tout dans "chaine"
             // On affiche la chaîne

            fclose(fichier);
        }
       
       
     
      system("PAUSE");     
      return 0;
    }
    • Partager sur Facebook
    • Partager sur Twitter
      8 juin 2006 à 14:40:36

      je ne veux pas te dire de betise mais je crois que tu n'a utiliser que des fonctions qui lisent des chaines de caractères fgets et fputs.

      le "s" dans leur nom signifie sring (chaine de caractère en anglais)

      que l'on m'arrete si je me trompe mais selon moi l'erreur viens de la.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        8 juin 2006 à 14:44:49

        je pensse qu'il faudre que je copie octet par octet mais je ne sait pa comment faire :lol: .
        quelqu'un pourrait t'il m'eguiller
        • Partager sur Facebook
        • Partager sur Twitter
          8 juin 2006 à 18:17:15

          Dans ce cas tu ouvre ton fichier en binaire.
          Plus d'infos sur le site de -ed-
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            17 juin 2006 à 19:49:39

            quelqu'un pourrait t'il me faire un exemple sou l'ouverture binaire car ce lien s'addresse au programmeur d'un certain niveau
            merci d'avance .
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              17 juin 2006 à 19:53:05

              Surtout qu'ici tu lis des lignes, ce qui a peu de logique pour un fichier image par exemple. Peut être qu'ne simple boucle avec fgetc / fputc devrait marcher, sinon écris des blocs, par exemple, de 512 octets avec des fread et fwrite.
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                17 juin 2006 à 20:00:12

                je vient d'essayer fgetc / fputc cela ne marche pas et pour fread et fwrite je n'est pas tous compris . quelqu'un pourrait t'il m'eclerait?
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  17 juin 2006 à 21:23:42

                  size_t fread (void *ptr, size_t size, size_t nmemb, FILE *stream);
                  size_t fwrite (const void *ptr, size_t size, size_t nmemb, FILE *stream);

                  fread lit nmemb blocs de size octets sur stream et les place à ptr. fwrite écrit sur stream ce qui est situé à ptr. Elles retournent le nombre de blocs correctement écrits. En pratique, ça peut donner ça :
                  #define BLOCK_SIZE 512

                  char tmp[BLOCK_SIZE];
                  FILE *source, *dest;
                  source = fopen("fichier_source", "rb");
                  dest = fopen("fichier_destination", "wb");

                  while (!feof(source))
                  {
                          fread(tmp, BLOCK_SIZE, 1, source);
                          fwrite(tmp, BLOCK_SIZE, 1, dest);
                  }
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 juin 2006 à 21:51:21

                    Je viens d'écrire ceci en m'aidant du K&R, je pense que ça devrait marcher.

                    Le code suivant utilise les fonctions read et write, et non fread et fwrite, que louisclem a utilisé ci dessus.

                    Si, ce qui est très probable, le code a des défauts, je serai très reconnaissant à celui qui pourrai me les indiquer. Merci.

                    Pose des questions si tu ne comprends pas.

                    #include <stdlib.h>
                    #include <stdio.h>
                    #include <fcntl.h>

                    #if defined BUFSIZ
                    #undef BUFSIZ
                    #endif     

                    #define BUFSIZ 512
                    #define PERMS 0666 /* rights of reading and writing for all. */

                    void error(char* err)
                    {
                        write(1, err, strlen(err));
                       
                        getchar();
                        exit(EXIT_FAILURE);
                    }

                    /* min_cp : copy fd1 in fd2 by blocs of 512 bytes. */
                    int main(int argc, char* argv[])
                    {
                        int fd1, fd2, n, nw;
                        char tamp[BUFSIZ] = {0};
                       
                        if (argc != 3)
                            error("Error: No file have been specified.");
                        if ((fd1 = open(argv[1], O_RDONLY, 0))== -1)
                            error("Error: cannot open any file.");
                        if ((fd2 = creat(argv[2], PERMS))== -1)
                            error("Error: cannot creat any new file.");
                       
                        while ((n = read(fd1, tamp, BUFSIZ)) > 0)
                            if ((nw = write(fd2, tamp, n)) != n)
                                    error("Error: cannot writing in file.");   
                       
                        printf("Success. \n");           
                        printf("%d bytes haven't been read in %s \n", n, argv[1]);
                        printf("%d bytes has been written in %s \n", nw, argv[2]);

                        getchar();
                        return 0;
                    }


                    [e:]
                    Success.
                    0 bytes haven't been read in test.txt
                    5 bytes have been written in c_test.txt


                    C'est déjà un bon début. :)
                    [/e]

                    Bonne chance, en espérant que ça marche !
                    ++
                    • Partager sur Facebook
                    • Partager sur Twitter

                    programme de copie

                    × 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