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

Bibliothèque standard C Discussion :

Convertir un char* en FILE*


Sujet :

Bibliothèque standard C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Responsable technique
    Inscrit en
    Février 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Février 2006
    Messages : 366
    Par défaut Convertir un char* en FILE*
    Bonjour à tous,

    Je vous explique la situation avant de dire que je suis tordu du cerveau lol.
    J'ai un fichier .dat qui contient plusieurs images. Lorsque je charge une de ces image, les données binaires du fichier image se retrouvent en mémoire. J'ai donc accès à ces infos par l'intermédiaire d'un buffer d'ou le char* (fichier image= fichier binaire -> suite d'octets). J'ai une fonction qui fait un certains nombre de traitements sur les images et cette fonction prend en paramètre le nom du fichier. Je souhaiterai adapter cette fonction à mon buffer en mémoire.

    Par exemple, j'aimerai pouvoir faire quelquechose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char *buffer;
    ...
    fread (header, .... buffer);
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FILE *fp;
    ...
    fread(header,...fp);
    J'essai de remplir correctement la structure FILE mais le programme se bloque dans le fread lorsqu'il veut accèder au handle du fichier étant donné que celui-ci est faux.

    Donc si vous avez des idées ou des suggestions n'hésitez pas.

    Merci

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Ce n'est pas possible de maniere standard. Deux solutions:
    - soit utiliser des extensions (la libc de Linux permet ce genre de choses, voir sa doc; je n'ai aucune idee a quel point ce genre d'extension est rependue)
    - soit ajouter une couche qui fera le dispatch au choix vers ton buffer ou vers des FILE*

  3. #3
    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 drcd Voir le message
    J'essai de remplir correctement la structure FILE mais le programme se bloque dans le fread lorsqu'il veut accèder au handle du fichier étant donné que celui-ci est faux.
    Stop Tu fais n'importe quoi. Il faut cesser le bricolage. Le C est un langage de professionnel, et non de bidouilleurs hasardeux...

    Le contenu de la structure FILE n'est pas défini par le langage C. Il ne sert qu'a l'implémentation des fonctions. Tu n'as absolument pas pas le droit d'y modifier quoi que ce soit.

    La seule façon d'ouvrir un fichier est d'utiliser fopen(). Point.

    J'ai rien compris à ce que tu voulais faire, mais il est certain que cette méthode est fausse.

    Essaye d'expliquer exactement le but final de l'opération sans essayer de trouver la solution. Règle de bon sens : on commence par définir le problème avant de le résoudre...

  4. #4
    Membre très actif
    Profil pro
    Responsable technique
    Inscrit en
    Février 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Février 2006
    Messages : 366
    Par défaut
    Le but final est de lire l'image au format TGA qui est stockée en mémoire et de l'afficher ensuite avec OpenGL. Pour faire ca, j'ai besoin de récupérer les infos du fichier. J'ai deja le code mais il utilise des FILE*. Dans ce code, je fais des fread, des fseek et des fgetc. Et je ne vois pas comment faire autrement que de simuler une ouverture de fichier pour lire mon image qui est en mémoire.

    Autrement dit, je veux parser un fichier qui n'est pas stocké sur le disque dur mais qui est stocké en mémoire.

    PS: Petite précision, je suis sous VS 2005.

  5. #5
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    1/ Tu peux regarder si tu veux si une extension de VS le permet -- je connais rien a Windows
    2/ Sinon, tu ne peux pas le faire sans modifier ton code existant. Ce que tu peux faire alors pour minimiser les changements est de modifier ton code pour qu'il utilise des ABSTRACTFILE*, abstractgetc, etc... Dans le code des abstractXXX, tu testes ce que ton ABSTRACTFILE* est reellement et tu fais ce qu'il faut (une technique est d'avoir des pointeurs de fonctions dans l'ABSTRACTFILE), genre:
    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
     
    struct AbstractFile {
       void* data;
       int (getc)(AbstractFile*);
    };
     
    int abstractGetC(AbstractFile* f)
    {
       return f->getc(f);
    }
    ...
    int streamGetC(AbstractFile* f)
    {
       return fgetc((FILE*)f->data);
    }
     
    AbstractFile* makeAbstractFromStream(FILE* s)
    {
       AbstractFile* result = malloc(sizeof result);
       result->data = s;
       result->getc = streamGetC;
       return result;
    }

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 501
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    2/ Sinon, tu ne peux pas le faire sans modifier ton code existant. Ce que tu peux faire alors pour minimiser les changements est de modifier ton code pour qu'il utilise des ABSTRACTFILE*
    Quitte à modifier le code, autant le faire en réimplémentant quelque chose de propre, à mon avis ...

  7. #7
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Pourquoi ne pas créer un fichier y stocker ton image en mémoire ainsi tu pourras utiliser tes fonctions prenant des FILE * ...non ?

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

Discussions similaires

  1. convertir un char * en string
    Par Seij dans le forum C++
    Réponses: 5
    Dernier message: 08/03/2006, 22h23
  2. convertir un char en int / et prob d'espace
    Par yanchasp dans le forum C++
    Réponses: 20
    Dernier message: 07/02/2006, 19h17
  3. comment convertir un char[] en double
    Par groult jeremy dans le forum C++
    Réponses: 6
    Dernier message: 17/11/2005, 14h49
  4. [Conversion]Convertir un char[] en int
    Par ThanosT dans le forum Général Java
    Réponses: 10
    Dernier message: 11/11/2005, 12h23
  5. [ATL] Convertir un char* en LPCTSTR
    Par MrMaze dans le forum MFC
    Réponses: 6
    Dernier message: 27/04/2005, 21h48

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