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 :

Problème pour manipuler un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Par défaut Problème pour manipuler un fichier
    Bonjour,

    Ce que je souhaite, c'est ouvrir un fichier (binaire), le créer s'il n’existe pas (ce que je ne sais pas à l'avance), puis le modifier (sans changer sa taille).

    Mais j'ai un petit souci pour le manipuler.
    En effet au départ j'ai ouvert le fichier avec un fopen en mode "a+b", mais malgré un fseek qui pointe où je veux, je ne parviens à écrire qu'à la fin. (normal d'après la FAQ).
    J'ai ensuite ouvert le fichier en "r+", mais là c'est si le fichier n'existe pas que ça ne va plus.

    J'ai donc adopté temporairement une solution magnifique, la combinaison des deux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          file = fopen(filename, "a");
          fclose(file);	
          file = fopen(filename, "r+");
    Je suppose qu'il existe une solution un peu plus propre.
    Pourriez vous m'aider à la trouver?

    Merci d'avance

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Si tu veux écrire en binaire, il faut toujours mettre 'b' dans les options.

    Pour lire et écrire où tu veux, il faut utiliser 'w+b'.


    Mais il faut bien comprendre que tu ne pourra pas insérer des octets, juste écraser des octets.

    Si tu veux insérer des caractères, il faudrait lire le contenu et le stocker dans une liste chaînée puis réécrire entièrement le fichier.

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Par défaut
    Merci.
    Ce qui m’embête avec le w, c'est que si le fichier existe déjà, son ancien contenu est perdu. Or je souhaite seulement modifier quelques octets par-ci par-là, mais surtout ne pas perdre le reste.

    Donc je m'oriente plutôt vers une liste chainée...

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Non, avec w si le fichier existe, ton pointeur de flux est placé à la position 0 (donc si tu écris, tu écraseras le contenu) mais tu peux déplacer le pointeur de flux avec ftell.

    Le contenu de l'ancien fichier n'est donc pas forcément perdu.

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Non, avec w si le fichier existe, ton pointeur de flux est placé à la position 0 (donc si tu écris, tu écraseras le contenu) mais tu peux déplacer le pointeur de flux avec ftell.

    Le contenu de l'ancien fichier n'est donc pas forcément perdu.
    n1256 :
    7.19.5.3 The fopen function
    ....
    w truncate to zero length or create text file for writing
    wb truncate to zero length or create binary file for writing
    w+ truncate to zero length or create text file for update
    w+b or wb+ truncate to zero length or create binary file for update

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    déplacer le pointeur de flux avec fseek, je ne suis pas très réveillé^^

    w truncate to zero length or create text file for writing
    Autant pour moi alors. Mais est-ce qu'il y a une nuance entre ramener la taille du fichier à 0 et supprimer son contenu?

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

Discussions similaires

  1. [FTP] Problème pour uploader un fichier
    Par Crazyblinkgirl dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/01/2008, 22h21
  2. problème pour parser un fichier xml avec XML::Simple
    Par black_code dans le forum Modules
    Réponses: 3
    Dernier message: 30/01/2006, 19h32
  3. [win] problème pour partager des fichiers entre 2 pc
    Par goma771 dans le forum Administration
    Réponses: 1
    Dernier message: 01/12/2005, 16h15
  4. Problème pour Télécharger des fichiers
    Par joce3000 dans le forum C++Builder
    Réponses: 8
    Dernier message: 21/01/2005, 10h30
  5. Réponses: 2
    Dernier message: 18/01/2003, 17h06

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