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 :

le type FILE*


Sujet :

C

  1. #1
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut le type FILE*
    salut !

    c'est possible de créer une variable de type FILE* un peu comme le stdin ?
    c'est à dire pas sur le disque dur mais directement dans la memoire !
    ...j'espere ne pas avoir dis une grosse c...

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ce n'est pas une connerie, et hélas, non.
    Il n'existe aucun écquivalent en C standard aux MemoryStream offerts par certains langages.

    Par contre, il me semble que tu peux, en C standard, créer un fichier temporaire qui sera supprimé quand tu le fermeras, et sera si possible gardé en RAM.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    dommage...

    merci pour ta reponse !

  4. #4
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    ps: j'imagine que c'est pas avec fopen qu'on peut faire ca...

  5. #5
    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 : 48
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par kamouminator
    ps: j'imagine que c'est pas avec fopen qu'on peut faire ca...
    fopen agit uniquemeht sur les fichiers sur disque. Je pense qu'il serait assez intéressant de créer ses propres routines pour simuler par exemple un fichier mais virtuel (en ram au lieu du disque dur) ... enfin jusque dans la mesure du possible
    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 !

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je crois bien que la fonction appropriée s'appelle tmpfile() ou un truc du genre...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Franck.H
    fopen agit uniquemeht sur les fichiers sur disque.
    Absolument pas. Si un volume virtuel a été créé (on sais le faire en DOS avec device=vdisk ... ou un truc comme ça, c'est vieux, pourquoi pas en Windows), il a une lettre et devient accessible à fopen() comme n'importe quelle unité.

  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 : 48
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Médinoc
    Je crois bien que la fonction appropriée s'appelle tmpfile() ou un truc du genre...
    C'est ca mais je tiens à souligner que l'ouverture du fichier créé se fait en "wb+" autrement dit en mode binaire !
    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
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par kamouminator
    c'est possible de créer une variable de type FILE* un peu comme le stdin ?
    c'est à dire pas sur le disque dur mais directement dans la memoire !
    ...j'espere ne pas avoir dis une grosse c...
    Avant de chercher une solution, il faut exposer le problème.

    Je rappelle le processus, visiblement, ça a du mal à rentrer.

    1 - définir (quoi ?)
    2 - concevoir (comment ?)
    3 - réaliser (codage et tests).

    Alors que veux-tu faire exactement ?

  10. #10
    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 : 48
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Absolument pas. Si un volume virtuel a été créé (on sais le faire en DOS avec device=vdisk ... ou un truc comme ça, c'est vieux, pourquoi pas en Windows), il a une lettre et devient accessible à fopen() comme n'importe quelle unité.
    Ok, merci Emmanuel, j'ai appris quelques chose aujourd'hui car je ne savais pas ca.
    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 !

  11. #11
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    en fait comme je l'ai souvent dis, je suis entrain d'ecrire une sorte de calculette...
    et ce que je veux faire la, c'est d'enregistrer chaque ligne tappée dans un tableau(de pointeur) a i= 0 il y aura la premiere ligne....pour pouvoir revenir au calcul precedent facilement en appuiant par ex sur la fleche haut.

    j'afficherai bien entendu une copie et non la ligne lue.

    ensuite je veux pouvoir modifier a mon aise cette ligne.
    comme une ligne sera aussi un tableau, il sera difficile de la modifier.

    je me demandais s'il etai pas possible de la mettre dans un FILE* et alors la modifier !

    mais j'ai eu la une meilleure idée...mais je ne sais absolument pas si c'est possible:
    on peut ecrire sur le stdin ??? ca m'arrangerai beacoup...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par kamouminator
    en fait comme je l'ai souvent dis, je suis entrain d'ecrire une sorte de calculette...
    et ce que je veux faire la, c'est d'enregistrer chaque ligne tappée dans un tableau(de pointeur) a i= 0 il y aura la premiere ligne....pour pouvoir revenir au calcul precedent facilement en appuiant par ex sur la fleche haut.

    j'afficherai bien entendu une copie et non la ligne lue.

    ensuite je veux pouvoir modifier a mon aise cette ligne.
    comme une ligne sera aussi un tableau, il sera difficile de la modifier.
    Si c'est tableau de pointeur sur des chaines allouées, c'est facile.

    Allouer un nouveau bloc, copier, modifier, libérer l'ancien bloc, stocker l'adresse du nouveau.
    je me demandais s'il etai pas possible de la mettre dans un FILE* et alors la modifier !

    mais j'ai eu la une meilleure idée...mais je ne sais absolument pas si c'est possible:
    on peut ecrire sur le stdin ??? ca m'arrangerai beacoup...

    Une calculatrice, c'est compliqué. Ca mérite une étude sérieuse, pas de la bidouille de coin de table...

  13. #13
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    mais j'ai etudié la question, j'ai d'ailleur une calculatrice qui marche,
    je cherche juste à faire quelques amelioration, bout par bout.
    d'abord un historique.

    ensuite une partie variables, fonctions, affectations. puis affichage d'une fonction avec la SDL.
    et enfin, peut etre, une interface graphique...

    presque toutes mes parties sont independantes, donc y'a pas de souci pour ajouter quoique ce soit !


    sinon, par rapport à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Si c'est tableau de pointeur sur des chaines allouées, c'est facile.
     
    Allouer un nouveau bloc, copier, modifier, libérer l'ancien bloc, stocker l'adresse du nouveau.
    je ne cherche pas a remplacer l'ancien bloc.
    et je ne comprend pas comment modifier serait facile !
    si par ex je veux inserer quelque chose a l'interieure de la ligne copiée...il faudrai decaler tout ce qu'il y a apres...

    c'est pour ca que je voulais savoir si ecrire sur le stdin etais possile !...ca l'est ou pas alors ?
    parcequ'en plus je n'aurai plus qu'a appeler ma fonction de saisie...et la modification se ferai afec le getchar...

    bien sur tout ca n'est qu'hypothetique....

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par kamouminator
    sinon, par rapport à:
    Si c'est tableau de pointeur sur des chaines allouées, c'est facile.

    Allouer un nouveau bloc, copier, modifier, libérer l'ancien bloc, stocker l'adresse du nouveau.
    je ne cherche pas a remplacer l'ancien bloc.
    et je ne comprend pas comment modifier serait facile !
    si par ex je veux inserer quelque chose a l'interieure de la ligne copiée...il faudrai decaler tout ce qu'il y a apres...
    C'est pas bien compliqué.
    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
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
     
    int main (void)
    {
    /* POSIX.1 donc tres portable. Fonction triviale... */
       char *s = strdup ("Hello word");
     
       puts (s);
     
       /* inserer " wild" */
       {
          char const *ins = " wild ";
          size_t const len = strlen (ins);
          char *const new = malloc (strlen (s) + len + 1);
     
          /* trouver le point d'inclusion */
          char *const p = strchr (s, ' ');
          *p = 0;
     
          strcpy (new, s);
          strcat (new, ins);
          strcat (new, p + 1);
     
          /* jeter l'ancien bloc */
          free (s);
     
          /* pointer sur le nouveau */
          s = new;
       }
     
       puts (s);
     
       free (s), s = NULL;
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Hello word
    Hello wild word
     
    Press ENTER to continue.

  15. #15
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    ah oui pas mal !
    avec un realloc et sans le strchr ca devrai peut etre le faire...
    c'est '\koi' pour retourner d'un caractere en arriere ?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par kamouminator
    ah oui pas mal !
    avec un realloc et sans le strchr ca devrai peut etre le faire...
    Euh... essaye...
    c'est '\koi' pour retourner d'un caractere en arriere ?
    N'existe pas.

    (Si tu penses à BS ou '\b', ça ne fait pas ce que tu crois, quand à ungetc(), euh, faut lire la doc...)

  17. #17
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    oui voila c'est ca \b,
    je ne demande pas ca pour l'ecriture sans une chaine, mais pour l'affichage a l'ecran: quand j'appuie sur fleche gauche ! pour deplacer le curseur !

    j'ai essayé avec ungetc(), mais ca marche pas, ca n'affiche q'un seul caractere:


    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
    #include<stdio.h>
     
     
     
     
    int main(void){
     
     
        char a=0;
     
        fflush(stdin);
     
     
        ungetc('s',stdin);
        ungetc('a',stdin);
        ungetc('l',stdin);
        ungetc('u',stdin);
        ungetc('t',stdin);
     
        do
        {
            a=getchar();
            printf("%c",a);
        }
        while(a!='\n');
     
     
     
     
     
    }

  18. #18
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    c'est bon, j'ai trouvé !!!!

    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
    #include<stdio.h>
     
     
     
     
    int main(void){
     
        int i=0;
        char a=0;
        char b[]="salut";
     
     
        fflush(stdin);
     
     
        do
        {   
            if(i<6)ungetc(b[i],stdin);
            a=getchar();
     
            printf("%c",a);
            i++;
     
        }
     
        while(a!='\n');
     
     
     
     
     
    }

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par kamouminator
    HORRIBLE

  20. #20
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    oh ! j'ai eu peur ! ^^

    non mais de toute facon ça marche pas en fait...
    je peux ni effacer, ni me deplacer vers un caractere particulier...

    je vais faire avec ta methode et puis c'est tout....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JSP]<input type="file">
    Par phoebe dans le forum Servlets/JSP
    Réponses: 13
    Dernier message: 16/07/2012, 19h50
  2. Input de type File sans le champ ?
    Par DemonKN dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 11/02/2010, 13h59
  3. [<input type="file"/>]
    Par NikoBe dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 27/04/2005, 09h17
  4. [HTML]Utilisation du type file
    Par Kuroro dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 23/12/2004, 16h12
  5. chemin d'un input de type file
    Par sbbn1 dans le forum ASP
    Réponses: 2
    Dernier message: 05/04/2004, 20h19

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