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 :

mode accès fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 83
    Par défaut mode accès fichier
    Bonjour tout le monde !

    Malgré de nombreux tests je peine à comprendre la différence entre le mode d'accès au fichiers binaire et le mode d'accès au fichiers texte. (wb et w par exemple)

    Voici un test concret:

    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
    #include <stdio.h>
    #include <stdlib.h>
    #define F_SORTIE "sortie"
    int main(void)
    {
    	FILE *f_in, *f_out;
    	int tab[] = {48, 49, 50};
     
    	/* ecriture du tableau dans F_SORTIE */
    	if ((f_out = fopen(F_SORTIE, "w")) == NULL) {
     
    	fprintf(stderr, "\nImpossible d'ecrire dans le fichier %s\n",F_SORTIE);
    	return(EXIT_FAILURE);
    	}	
    	fwrite(tab, 3 * sizeof(int), 1, f_out);
    	fclose(f_out);
     
    	/* lecture dans F_SORTIE */
    	if ((f_in = fopen(F_SORTIE, "r")) == NULL) {
     
    	fprintf(stderr, "\nImpossible de lire dans le fichier %s\n",F_SORTIE);
    	return(EXIT_FAILURE);
    	}
     
    	int tab2[3];
    	fread(tab2, 3 * sizeof(int), 1, f_in);
    	fclose(f_in);
     
    	int i;
    	for (i = 0 ; i < 3; i++) printf("%d\t",tab2[i]);
    	printf("\n");
     
    	return(EXIT_SUCCESS);
    }
    J'obtiens 0 1 2 dans mon fichier et 48 49 50 dans ma console. Mais il n'y a aucune différence si je remplace "w" par "wb" ou "r" par "rb".


    Dans la FAQ:
    • En mode binaire, aucune interprétation des données n'est effectuée.
    • En mode texte, certaines séquences de caractères sont interprétés comme étant une fin de ligne ou une fin de fichier


    Cela signifierait que le seul intérêt à utiliser "r" serait d'obtenir un EOF lors de la lecture d'un fichier par exemple ? Mais alors pourquoi utilisé "w" ?

    Merci de votre lecture.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    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 391
    Par défaut
    La différence principale entre binaire et texte, c'est le retour à la ligne ('\n') qui est différent sous Windows et sous les anciens Mac, mais toujours traduit en '\n' quand on le lit en mode texte.

    Apparemment il y aurait aussi une différence quand on utilise les fonctions de lecture de caractères larges (fgetwc() etc.).
    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 prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 801
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par stoner Voir le message
    Bonjour tout le monde !

    Malgré de nombreux tests je peine à comprendre la différence entre le mode d'accès au fichiers binaire et le mode d'accès au fichiers texte. (wb et w par exemple)
    Salut
    Ca vient parce qu'il ya eu a une époque un schisme qui n'a jamais été résolu.
    Les partisans windows ont considéré qu'un fichier texte se comporterait comme une machine à écrire: en fin de ligne un caractère '\r' pour ramener le charriot en début de ligne puis un caractère '\n' pour faire tourner le charriot faisant passer le papier à la ligne suivante.
    Alors que les partisans Unix ont considéré qu'un fichier informatique étant un peu plus évolué qu'une machine à écrire, un caractère suffirait.
    Et donc quand on programme dans le monde Windows, et qu'on veut lire un fichier texte, il faut l'ouvrir en mode "r". Dans ce cas, quand on arrive en fin de ligne, la fonction de lecture lit les 2 caractères '\r\n' d'un coup.
    En revanche, si tu veux traiter un fichier binaire (son, vidéo, image, etc) il faut spécifier "b" dans l'ouverture pour que si par hasard le fichier contient un '\r' puis un '\n' ces 2 caractères soient traités de façon distincte.

    Dans le monde Unix, ce problème n'existe pas: un fichier texte n'ayant qu'un seul caractère marquant la fin de ligne, les fonctions de lecture n'en lisent qu'un quoi qu'il arrive et donc le mode "b" n'est pas pris en compte.

    Citation Envoyé par stoner Voir le message
    Cela signifierait que le seul intérêt à utiliser "r" serait d'obtenir un EOF lors de la lecture d'un fichier par exemple ? Mais alors pourquoi utilisé "w" ?
    "r" signifie que tu as juste l'intention de lire le fichier et "w" que tu veux juste le remplir (dans ce cas il est d'abord automatiquement vidé). Ensuite tu peux mettre "r+" signifiant que tu veux le lire et aussi le modifier ou "w+" signifiant que tu veux le vider puis le remplir mais aussi le lire.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 83
    Par défaut
    Ah d'accord merci beaucoup !

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

Discussions similaires

  1. Acces fichier en mode append
    Par themadmax dans le forum Windows
    Réponses: 0
    Dernier message: 22/06/2011, 16h25
  2. [C#] Accès fichiers Internet
    Par joujou_le_fou dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/08/2004, 12h49
  3. [tomcat]acces fichier dans contexte
    Par krollette dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 23/01/2004, 14h17
  4. pb service NT / accès fichier
    Par gord's dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 24/07/2003, 17h20
  5. [Kylix] accés fichiers
    Par sdoura dans le forum EDI
    Réponses: 4
    Dernier message: 08/10/2002, 19h33

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