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

C Discussion :

[Fichier] création dynamique


Sujet :

C

  1. #1
    En attente de confirmation mail

    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2003
    Messages : 219
    Points : 108
    Points
    108
    Par défaut [Fichier] création dynamique
    Bonjour,
    Je crée bien un fichier avec mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    main (void) {
      char *fichier = "monFichier.txt";
      int f;
          if ((f = creat(fichier,S_IREAD|S_IWRITE)) == -1) {
             printf("Erreur de création du fichier %s.\n", fichier);
          }
          else 
             printf("fichier \"%s\" creer avec succes. \n",fichier);
    }
    Je n'aimerai pas fixer le nom (monFichier.txt) à la création. J'aimerai que l'utilisateur entre le nom qu'il désire donner à son fichier.
    Je ne sais si le C le permet.
    Bref comment pendre un pointeur (char *ptr), y introduire ce que l'utilisateur tape et passer en paramètre de mont creat ?

    Merci

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par zsoh
    Je n'aimerai pas fixer le nom (monFichier.txt) à la création. J'aimerai que l'utilisateur entre le nom qu'il désire donner à son fichier.
    Je ne sais si le C le permet.
    Bref comment pendre un pointeur (char *ptr), y introduire ce que l'utilisateur tape et passer en paramètre de mont creat ?
    Bin bien sûr que c'est possible, les arguments en ligne de commande sont là pour ca et au pire des cas, tu peux le faire dans le programme tout en posant une question à l'utilisateur.

    Pour ton premier problème que tu ne cites pas, la fonction main retourne toujours un int donc:
    et bien sûr, à la fin du programme, avant l'accolade fermante:
    ou avec l'inclusion du fichier d'en-tête stdlib.h
    qui est mieux pour la portabilité de ton code !


    Si tu veux que l'utilisateur passe le nom du fichier en ligne de commande, donc au lancement du programme, voici le main qu'il te faut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main (int argc, char ** argv)
    et tu peux tester simplement si l'utilisateur à entrer le nom:
    ensuite, tu passes à ta fonction creat la chaîne contenue dans l'argument argv de ton main soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    creat (argv[1], S_IREAD | S_IWRITE)
    Infos : argv[0] contient le nom de ton programme


    L'autre solution consiste simplement à afficher un petit message avec printf qui demande à l'utilisateur d'entrer un nom de fichier puis tu récupère le contenu du buffer stdin (buffer clavier) avec la fonction fgets !


    Une petite note pour conclure, si tu n'utilise pas le valeur autre part que dans la condition if ... else, tu peux faire sans ton int pour le retour de la fonction creat soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (creat(fichier,S_IREAD|S_IWRITE) == -1)

    Voilà, j'espère avoir pû t'aider
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    En attente de confirmation mail

    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2003
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    Bonjour et merci
    Je recupère bien mes arguments de main () sous Linux.
    Sous Windows je ne sais comment recupérer ces arguments.
    Aussi quand j'essaye creat(stin, ..)
    cela crée un fichier avec un nom arbitraire que je n'ai pas entré.

    Merci

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par zsoh
    Je recupère bien mes arguments de main () sous Linux.
    Sous Windows je ne sais comment recupérer ces arguments.
    C'est pareil. Montre ton code.

    Tu devrais utiliser fopen() qui est standard.
    Pas de Wi-Fi à la maison : CPL

  5. #5
    En attente de confirmation mail

    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2003
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    Voilà j'ai pu créer en entrant le nom. Néanmoins j'ai encore un pb.
    J'entre un nom de 30 caractères max. je crée le fichier ayant ce nom et j'aimerai recupérer tout ce que j'entre au clavier pour introduire dans mon fichier (methode saisir(...)). Mon code complet est le suivant :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #include <stdio.h>
    #include <sys\stat.h>
    #include <io.h>
    #include <conio.h>
    //############ creation de fichier
    void createFile(char *fichier) {
      int f;
     
          if ((f = creat(fichier,S_IREAD|S_IWRITE)) == -1) {
             printf("Erreur de creation du fichier %s.\n", fichier);
          }
          else 
             printf("fichier \"%s\" cree avec succes. \n",fichier);
      }
     
    //############ saisie dans un fichier
    void saisir(FILE *fpe, FILE *fps)  {
       int c;
       //char *texte;
       printf("\tSaisir votre texte\n");
       //scanf("%s",&texte);
       while ((c=getc(fpe)) != EOF)
          putc(c, fps);
    }
    //main (int argn, char **argv)   {
    int main (void) {
      FILE *fp;
      char monFichier[31];
      printf("Saisir le nom de votre fichier\n");
      scanf("%30s",&monFichier); //31ème caractère = \0
      // creation du fichier de nom monFichier
      createFile(monFichier);
      //ouverture du fichier
      if ((fp = fopen(monFichier, "w"))  == NULL) {
    	      printf("Impossible d'ouvrir le fichier \"%s\" .\n", monFichier);
    	      return 1;
    	 }
       else {
           saisir(stdin, fp);
           //saisir(fp,stdout);
       	   fclose(fp);
       }
      getch();
      return(0);
    }
    Le pb c'est que ce code me permet de saisir infiniment. Comment je peux matérialiser la fin de la saisi de mon texte

    Merci

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par zsoh
    Le pb c'est que ce code me permet de saisir infiniment. Comment je peux matérialiser la fin de la saisi de mon texte
    Pour écrire une fonction de saisie correcte avec fgetc(), il faut tester '\n' qui marque la fin de saisie.

    A lire et à expérimenter d'urgence (pose des questions si tu ne comprends pas) :

    Théorie : http://emmanuel-delahaye.developpez.com/notes.htm#fgetc
    Pratique : http://emmanuel-delahaye.developpez.com/inputs.htm
    Pas de Wi-Fi à la maison : CPL

  7. #7
    En attente de confirmation mail

    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2003
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    STP, puisque tu t'y connais mieux.
    Je vais regarder les liens après.
    mais j'ai une autre préocupation urgente.
    Pourquoi quand je crée un fichier de structure par exemple avec des fwrite() pour remplir mon tableau, quand je m'en vais ouvrir le tableau dans un editeur, mon fichier n'est pas lisible ?

    Merci

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par zsoh
    Pourquoi quand je crée un fichier de structure par exemple avec des fwrite() pour remplir mon tableau, quand je m'en vais ouvrir le tableau dans un editeur, mon fichier n'est pas lisible ?
    Ecriture au format binaire et non texte, voilà la raison.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  9. #9
    En attente de confirmation mail

    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2003
    Messages : 219
    Points : 108
    Points
    108
    Par défaut
    comment dons écrire au format texte ?

    Merci

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par zsoh
    Pourquoi quand je crée un fichier de structure par exemple avec des fwrite() pour remplir mon tableau, quand je m'en vais ouvrir le tableau dans un editeur, mon fichier n'est pas lisible ?
    Parce que ce n'est pas un fichier texte.

    http://emmanuel-delahaye.developpez....s.htm#fichiers
    http://emmanuel-delahaye.developpez....m#enreg_struct

    Pose des questions si tu ne comprends pas.
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par zsoh
    comment dons écrire au format texte ?
    Tu vas peut être arrêter de poser des questions basiques... Le C, c'est comme tout, ça s'apprend...

    Il y a des références de livres et de tutoriels sur ce site et sur le mien.
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. [WD10] Création dynamique d'un fichier .fic
    Par rojobe dans le forum WinDev
    Réponses: 3
    Dernier message: 05/09/2011, 12h54
  2. Création dynamique d'un fichier XML
    Par Klemsy78 dans le forum Langage
    Réponses: 2
    Dernier message: 28/12/2009, 15h19
  3. [JDOM] création dynamique d'un formulaire correspondant à un fichier XML
    Par sissi25 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 28/05/2008, 16h03
  4. Création dynamique d'un fichier
    Par nesrine6215 dans le forum C
    Réponses: 3
    Dernier message: 15/05/2008, 17h39
  5. [XSLT] Création de fichier XML dynamique avec PHP
    Par daninho dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 02/02/2006, 11h18

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