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 :

Stockage dans l'application


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Par défaut Stockage dans l'application
    Bonjour,

    J'ai la fonction suivant dans une boucle qui ecrit 8192 octects par boucle dans un fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite(OutputBuffer,1,8192,OutputFp);
    J'aimerais remplacer cette fonction par une fonction qui stockerait toutes les données dans la memoire de l'application au lieu de les écrire dans un fichier. Par contre je ne sais pas combien de memoire il faut allouer pour le stockage...
    OutputBuffer est déclaré en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned char OutputBuffer[8192];
    Voila, merci de votre aide...

  2. #2
    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 yugimega
    J'ai la fonction suivant dans une boucle qui ecrit 8192 octects par boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite(OutputBuffer,1,8192,OutputFp);
    J'aimerais remplacer cette fonction par une fonction qui stockerait toutes les données dans la memoire de l'application comme un concatenage. Par contre je ne sais pas combien de memoire il faut allouer pour le stockage...
    OutputBuffer est déclaré en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned char OutputBuffer[8192];
    Euh, tu as relut ta question ? Parce qu'elle n'a aucun sens.

    fwrite(), ça ne lit rien du tout. Comme son nom l'indique, ça écrit dans un flux.

    Tu parlais peut être de fread() ? Dans ce cas, il faut un tableau dynamique et apprendre à utiliser correctement realloc() et se basant sur la valeur retournée par fread().

    C'est assez délicat...

    http://emmanuel-delahaye.developpez....tes.htm#malloc
    http://emmanuel-delahaye.developpez....es.htm#realloc

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Par défaut
    J'ai modifié ma question, mais je ne veus rien lire juste ecrire les données dans la memoire de l'application au lieu de les ecrires dans le fichier. Mais le seul proleme c'est que je ne connais pas le nombre de boucle il y a car c'est un do{...}while(1); et que c'est varriant...

  4. #4
    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 yugimega
    <...>je ne veus <...> juste ecrire les données dans la memoire de l'application au lieu de les ecrires dans le fichier. Mais le seul proleme c'est que je ne connais pas le nombre de boucle il y a car c'est un do{...}while(1); et que c'est varriant...
    Si tu ne sais pas combien de (blocs de )données il faut écrire et que tu n'a pas de marqueur pour savoir quand t'arréter, il n'y a pas de solution.

    Gros problème de conception.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Par défaut
    Alors disons que je sais quelle taille il faut allouer, que puis je faire pour ajouter les données au fur et a mesure en usigned char dans une autre variable ??? Le total des données reviens environ a 50 Mo

  6. #6
    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 yugimega
    Alors disons que je sais quelle taille il faut allouer, que puis je faire pour ajouter les données au fur et a mesure en usigned char dans une autre variable ??? Le total des données reviens environ a 50 Mo
    C'est un simple tableau. Tu ne connais pas les tableaux ? Il suffit d'allouer le bloc nécessaire et de gérer correctement un indice d'écriture au fur et à mesure...

    Fait de ton mieux et poste le code si il y a un problème.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Par défaut
    J'ai réussi en mettant a peu pres ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    usigned char OutputBuffer[8192];
    usigned char *block = new unsigned char[52428800]; //= a 50Mo
    int x=0;
     
    do
    {
    [...]
    memcpy(block+x, OutputBuffer, 8192);
    x=x+8192;
    [...]
    }while(1);
    Dans le gestionnaire de tache, je vois a la fin de la boucle que 45 Mo de memoire sont utilisé par mon application. Donc mes données sont bien stocké mais je ne suis pas sur que tout soit bien comme il faut au niveau du stockage... Le programme est-il bien ???

  8. #8
    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 du c++ ca ! spa du C !

  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 yugimega
    J'ai réussi en mettant a peu pres ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    usigned char *block = new unsigned char[52428800]; //= a 50Mo
    Pas du C.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       unsigned char *block = malloc (52428800);
       if (block != NULL)
       {
          /* utilisation */
     
     
          /* et quand c'est fini */
          free (block), block = NULL;
       }

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Par défaut
    Ah oui c'est vrai ca c'est du C++ désolé mais en tout cas j'ai fait plein de test et ca fonctionne avec new et malloc...
    Merci beaucoup pour votre aide...
    Bien amicalment Yugimega...

  11. #11
    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 yugimega
    Ah oui c'est vrai ca c'est du C++ désolé mais en tout cas j'ai fait plein de test et ca fonctionne avec new et malloc...
    Merci beaucoup pour votre aide...
    Bien amicalment Yugimega...
    Alors c'est que tu compiles en C++. Si c'est le cas, et que tu veuilles ou non :
    • Ton code est écrit en C++ (du moins compilé selon ses regles, qui ne sont pas celles du C)
    • Tu t'es donc trompé de forum.

    Si tu veux faire du C, vérifie déjà que l'extension de ton code source est bien .c et non .cpp.

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

Discussions similaires

  1. Intégrer une partie stockage dans une application ?
    Par nickylarson59 dans le forum Android
    Réponses: 6
    Dernier message: 30/05/2014, 10h59
  2. Stockage de données dans une application Swing
    Par taldir dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 24/02/2012, 16h05
  3. Licence MySql en tant que BD dans une application web
    Par Volta dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 26/02/2004, 14h38
  4. fenetre dos dans une application
    Par jfb53 dans le forum C++Builder
    Réponses: 3
    Dernier message: 19/10/2003, 18h06
  5. Réponses: 7
    Dernier message: 26/06/2003, 09h11

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