[C]Fichier

Résolu
Street -  
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

j'ai une fonction
int copy(char *src, char *dst)

qui copy le contenu de 2 fichiers.
Dans mon main, je voudrais savoir comment faire pour l'afficher à l'écran lorsque le fichier src n'est pas précisé

Merci

7 réponses

  1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    peut être :
    if(src==0) printf("'...");
    0
  2. jisisv Messages postés 3678 Statut Modérateur 936
     
    Pourquoi ne pas utiliser stdout
    man 3 stdout
    extrait du man
    NAME
         stdin, stdout, stderr - standard I/O streams
    
    SYNOPSIS
         #include <stdio.h>
         extern FILE *stdin;
         extern FILE *stdout;
         extern FILE *stderr;
    
    DESCRIPTION
         Under normal circumstances every Unix program has three streams opened for it when it  starts up, one for input, one for output, and one for printing diagnostic or error messages. These are typically attached to the user's terminal (see tty(4)) but might instead  refer to files or other devices, depending on what the parent process chose to set up.
         (See also the ``Redirection'' section of sh(1) .)
    
    0
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 942
     
    int copy(char *src, char *dst)
    qui copy le contenu de 2 fichiers

    ==> c'est pas plutôt le contenu de src qui est copié dans dst ?

    il suffit de controler que les deux fichiers peuvent être ouvert en contrôlant le code de retour de fopen.
    http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/fopen.3.html
    int test_file(const char *src){
      FILE *fp = fopen(src);
      if (!fp){
        printf("Y a un problème !\n");
        fclose(fp);
        return 0;
      }
      fclose(fp);
      return 1;
    }

    Bonne chance
    0
    1. Street
       
      En faite ce n'est pas ça mon problème.
      La fonction int copy(FILE *src, FILE *dst)

      Mon programme attend que je lui passe 2 arguments en ligne de commande par exemple :
      $ ./a.out source destination

      mon main est donc le suivant sans la gestion des erreurs
      int main(int argc, char *argv[])
      {
        FILE *fileIn, *fileOut;
        if(argc != 3)
         /*gestion erreur*/
        fileIn = fopen(argv[1], "r");
        fileOut = fopen(argv[2], "w")
        copy(fileIn, fileOut);
        return EXIT_SUCCESS;
      }


      ce que je voudrais savoir, c'est comment faire pour afficher le fichier à l'écran dans le cas ou l'on ne donne que le fichier de lecture
      $ ./a.out source
      0
  4. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 942
     
    Ok alors il suffit juste de controler le nombre d'argument :
    int main(int argc,char **argv){
      if(argc != 3){
        fprintf(stderr,"usage : %s source destination",argv[0]);
        return 1;
      }
      //...
      return 0;
    }

    Ceci dit le test que je t'ai donné doit être fait pour vérifier que le fichier source existe bien. Je pense qu'il peut être intéressant de la faire aussi sur le fichier destination pour vérifier qu'on écrase pas un autre fichier (il faudrait au moins que le programme demande confirmation avant d'écraser un fichier).

    Bonne chance
    0
    1. Street
       
      Salut,

      ça ne me dit toujours pas comment afficher le contenu du fichier à l'écran au lieu de le copier dans un autre fichier ?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. poof65
     
    f = fopen()
    Boucle
    fread(f)
    printf()
    Fin boucle
    fclose(f)
    0
  7. Street
     
    Ce n'est toujours pas ça alors qu'il me semble être clair dans ma demande ...
    Ce n'est pas grave, je vais me débrouiller
    0
    1. Radek
       
      int main(int argc, char *argv[])
      {
      FILE *fileIn, *fileOut;
      if(argc == 2) {
      fileIn = fopen(argv[1], "r");
      fileOut = stdout;
      } else if(argc == 3) {
      fileIn = fopen(argv[1], "r");
      fileOut = fopen(argv[2], "w")
      } else {
      ....
      ....
      /* gestion des erreurs
      }
      copy(fileIn, fileOut);
      return EXIT_SUCCESS;
      }
      0
      1. Street > Radek
         
        Salut,

        voilà c'est que je cherchais.
        Je l'ai refait en utilisant un switch, ça fait mieux ...
        0
  8. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    Salut.
    Je me disai bien aussi que ta question était bizard.
    La prochaine fois, pose correctement ta question, tu aura la bonne réponse de suite.
    0