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 :

Fseek et stdout


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Points : 27
    Points
    27
    Par défaut Fseek et stdout
    Bonjour,

    Pour les besoins de mon travail, je dois modifier un programme qui a pour principe d'ecrire les resultats sur la sortie stdout et de la rediriger ensuite vers un fichier
    Ex : toto.exe > toto.txt

    J'ecris au fur et a mesure de mon programme les resultats a l'aide d'un fprintf

    J'aurais besoin en fin de programme d'ecrire/inserer un bloc en debut de mon fichier mais sans effacer le contenu déjà ecris dedans bien sur

    J'ai donc essayer un fseek(File,0L,SEEK_SET) mais cette commande ecrit sur le texte déjà contenu dans le fichier et donc je perds des infos

    Connaissez vous une solution a mon pb ??

    Merci d'avance

  2. #2
    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 julinho99 Voir le message
    J'aurais besoin en fin de programme d'ecrire/inserer un bloc en debut de mon fichier mais sans effacer le contenu déjà ecris dedans bien sur
    On ne sait pas insérer au début. On ne sait qu'ajouter à la fin. Sinon, il faut faire du traitement de fichier par copie en insérant ce qu'on veut à la volée.
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Points : 27
    Points
    27
    Par défaut
    ça m'arrange pas trop ça

    l'autre solution consisterait a sauvegarder mes resultats dans une chaine de caracteres puis ecrire dans le fichier mon bloc a inserer en fin de programe et enfin ecrire ma chaine de caracteres dans le fichier

    Par contre il va me falloir un chaine de 500000 caracteres presque

    ça va pas le faire....

  4. #4
    Membre éclairé
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Points : 709
    Points
    709
    Par défaut une petite boucle
    salut
    essay d'ajouter une petite boucle comme ceci;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    FILE * file1=fopen("nom du fichier.text",rb);// le fichier que tu veux modifier
    FILE * file2;// le nouveau fichier
    fwrite(chaine,sizeof(chaine),1,file2);// ecrit ta chaine ici
    char ch;
    while(!feof(file1))
    {
    fread (&ch,1,1,file1);
    fwrite(&ch,1,1,file2);
    }
    teste je suis pas sur que sa te convienne
    If you type Google into Google, you Can break the internet" - The IT Crowd

  5. #5
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par julinho99 Voir le message
    Par contre il va me falloir un chaine de 500000 caracteres presque
    A moins de faire de l'embarqué, cette taille est très courante de nos jours et ne devrait pas poser de problème.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  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 buggen25 Voir le message
    bonjour
    tu pense a feof(file)?
    En tout cas, si tu penses à ça, tu penses mal. feof() ne fait pas ce que tu crois. Il faut tester la valeur retournée par la fonction de lecture.

    Si c'est du texte, il faut ouvrir en mode texte ("r", "w" et plutôt utiliser fgets()/fputs(), (quoi que pour une copie, c'est sans importance).
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre éclairé
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Points : 709
    Points
    709
    Par défaut
    oui mais si on ouvre le fichier en mode binaire et en lecture ("rb") sa devrait se faire si la taille du caractère est egale a 8bits sachant qu'un caractère prends 8bits en code ASCII
    If you type Google into Google, you Can break the internet" - The IT Crowd

  8. #8
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par buggen25 Voir le message
    oui mais si on ouvre le fichier en mode binaire et en lecture ("rb") sa devrait se faire si la taille du caractère est egale a 8bits sachant qu'un caractère prends 8bits en code ASCII
    Le codage ASCII nécessite 7 bits et pas 8!
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  9. #9
    Membre éclairé
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Points : 709
    Points
    709
    Par défaut
    salut;
    oui c'est vous suivez bien respect;
    mais comment coder 7 bits en c avec, c'est avec 8 bits c'est la ou je veux en venir
    dans un fichier la petite petite quantite d'information qu'on peut lire c'est 8bits si m'en souvien tres bien
    comme une variable de type unsigned char ch;
    ece vrai ou bien j'ai tout faux ?
    If you type Google into Google, you Can break the internet" - The IT Crowd

  10. #10
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par buggen25 Voir le message
    salut;
    oui c'est vous suivez bien respect;
    mais comment coder 7 bits en c avec, c'est avec 8 bits c'est la ou je veux en venir
    dans un fichier la petite petite quantite d'information qu'on peut lire c'est 8bits si m'en souvien tres bien
    comme une variable de type unsigned char ch;
    ece vrai ou bien j'ai tout faux ?
    La valeur dont tu parles est la constante CHAR_BIT qui fait au minimum 8 bits :
    5.2.4.2.1 Sizes of integer types <limits.h>
    1 The values given below shall be replaced by constant expressions suitable for use in #if
    preprocessing directives. Moreover, except for CHAR_BIT and MB_LEN_MAX, the
    following shall be replaced by expressions that have the same type as would an
    expression that is an object of the corresponding type converted according to the integer
    promotions. Their implementation-defined values shall be equal or greater in magnitude
    14) See ‘‘future language directions’’ (6.11.3).
    §5.2.4.2.1 Environment 21
    ISO/IEC 9899:TC3 Committee Draft — Septermber 7, 2007 WG14/N1256
    (absolute value) to those shown, with the same sign.
    number of bits for smallest object that is not a bit-field (byte)
    CHAR_BIT 8
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  11. #11
    Membre éclairé
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Points : 709
    Points
    709
    Par défaut limits.h
    salut

    c'est donc de sa que tu veux me parler
    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
    #endif
     
    #ifndef _INC_LIMITS
    #define _INC_LIMITS
     
    #if     !defined(_WIN32)
    #error ERROR: Only Win32 target supported!
    #endif
     
     
    #define CHAR_BIT      8         /* number of bits in a char */
    #define SCHAR_MIN   (-128)      /* minimum signed char value */
    #define SCHAR_MAX     127       /* maximum signed char value */
    #define UCHAR_MAX     0xff      /* maximum unsigned char value */
     
    #ifndef _CHAR_UNSIGNED
    #define CHAR_MIN    SCHAR_MIN   /* mimimum char value */
    #define CHAR_MAX    SCHAR_MAX   /* maximum char value */
    If you type Google into Google, you Can break the internet" - The IT Crowd

  12. #12
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par buggen25 Voir le message
    salut

    c'est donc de sa que tu veux me parler
    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
    #endif
     
    #ifndef _INC_LIMITS
    #define _INC_LIMITS
     
    #if     !defined(_WIN32)
    #error ERROR: Only Win32 target supported!
    #endif
     
     
    #define CHAR_BIT      8         /* number of bits in a char */
    #define SCHAR_MIN   (-128)      /* minimum signed char value */
    #define SCHAR_MAX     127       /* maximum signed char value */
    #define UCHAR_MAX     0xff      /* maximum unsigned char value */
     
    #ifndef _CHAR_UNSIGNED
    #define CHAR_MIN    SCHAR_MIN   /* mimimum char value */
    #define CHAR_MAX    SCHAR_MAX   /* maximum char value */
    c'est toi qui en parle! je ne fais que citer la norme...
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  13. #13
    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 buggen25 Voir le message
    oui mais si on ouvre le fichier en mode binaire et en lecture ("rb") sa devrait se faire si la taille du caractère est egale a 8bits sachant qu'un caractère prends 8bits en code ASCII
    Quel rapport avec ton problème ? Les unités de données réseau font 8-bit. toujours. Les données d'un fichier binaire aussi (0-255 : unsigned char).
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Membre éclairé
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Points : 709
    Points
    709
    Par défaut
    salut nicolas.sitbon
    Mais bon l'essentiel est que j'ai rien compris a cette norme,
    If you type Google into Google, you Can break the internet" - The IT Crowd

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/03/2004, 00h55
  2. Compréhension de fseek
    Par Argonz dans le forum C
    Réponses: 9
    Dernier message: 12/01/2004, 15h01
  3. Réponses: 16
    Dernier message: 18/07/2003, 17h16
  4. descripteur stdin stdout
    Par discogarden dans le forum Réseau
    Réponses: 10
    Dernier message: 08/01/2003, 23h25
  5. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17

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