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 :

Fichier binaire : cstdio, fwrite/fread ou fstream.read/write ?


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    112
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 112
    Par d�faut Fichier binaire : cstdio, fwrite/fread ou fstream.read/write ?
    Bonjour,



    J'aimerais conna�tre l'int�r�t d'utiliser fstream en lecture et �criture de fichiers binaires avec le C++ quand son �quivalent C de cstdio, avec fread et fwrite, est si pratique et pertinent dans son utilisation.

    Quel est le risque d'utiliser cstdio pour manipuler un fichier binaire en plein code C++ ?

  2. #2
    Membre tr�s actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par d�faut
    C'est deux fa�ons diff�rentes de g�rer les fichiers.
    Il n'y a pas de risque.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    112
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 112
    Par d�faut
    En codant sous Visual 2005, il met fopen en avertissement malgr� le fait que l'exe a l'air de tr�s bien fonctionner.

    warning C4996: 'fopen' a �t� d�clar� d�sapprouv�

    J'ai d�j� lu ici et l� que c'�tait mieux avec fstream sans explication � c�t�.

  4. #4
    Membre actif

    Inscrit en
    Octobre 2010
    Messages
    50
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 50
    Par d�faut
    Tu peux �crire #define _SCL_SECURE_NO_WARNINGS pour faire le taire le compilateur. Visual C++ veut que tu utilises ses versions "s�curitaires" des fonctions de librairie, (dans ce cas-ci ce serait fopen_s), mais ce n'est pas portable.

    Le gros avantage pour moi est que fstream peut lancer une exception si une op�ration �choue:

    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
    // ios::exceptions
    #include <iostream>
    #include <fstream>
    using namespace std;
     
    int main () {
      ifstream file;
      file.exceptions ( ifstream::eofbit | ifstream::failbit | ifstream::badbit );
      try {
        file.open ("test.txt");
        while (!file.eof()) file.get();
      }
      catch (ifstream::failure e) {
        cout << "Exception opening/reading file";
      }
     
      file.close();
     
      return 0;
    }

  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
    Un des interets des IOStreams sur l'interface C pour faire des IO, c'est l'extensibilite. Tu peux faire un {i,o}strem qui utilise le reseau ou l'interface graphique; tout ce que ta fonction qui fait des IO a besoin de savoir, c'est qu'elle prend un {i,o}stream. C'est pas possible de faire ca avec des FILE, sauf extension non standard d'une implementation de la bibliotheque.

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    112
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 112
    Par d�faut
    Tiens, je connais pas cette partie, cette syntaxe, � {i,o}stream � ne me dit rien.


    En fait, quand on bosse sur des gros fichiers avec une structure pr�cise, on sollicite beaucoup les fread()/fichier.read().

    On ne peut pas se permettre de tout mettre en tampon.


    Ce qui est pratique avec fread(), c'est son troisi�me param�tres pour les tableaux.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    unsigned short tab[6] = {101, 303, 202, 404, 606, 505};
    fread(&tab, sizeof(short), 6, fichier);
    Alors qu'avec fichier.read() qui n'a que deux param�tres dont le premier est d�j� bien bizarre...

Discussions similaires

  1. Commande Seek et Read (Fichier Binaire)
    Par DelphiBug dans le forum D�buter
    R�ponses: 0
    Dernier message: 10/05/2009, 03h17
  2. Fread() fichier binaire
    Par MClover dans le forum Biblioth�que standard
    R�ponses: 4
    Dernier message: 08/11/2008, 18h12
  3. [fread] Lecture de fichier binaire
    Par christophe_halgand dans le forum MATLAB
    R�ponses: 16
    Dernier message: 03/11/2008, 18h17
  4. [fstream] Lecture d'un fichier binaire
    Par poukill dans le forum SL & STL
    R�ponses: 6
    Dernier message: 19/06/2007, 09h27
  5. Probleme fstream fichier binaire
    Par Samildanach dans le forum SL & STL
    R�ponses: 4
    Dernier message: 19/02/2007, 16h24

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