Fichiers en c++

Maryy -  
mamiemando Messages postés 33758 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour !

Et une question de petite débutante en c++, une !

Voilà, je voudrais gérer des fichiers en c++ mais je ne trouve pas d'info à ce sujet. Déjà, je n'arrive pas à lire mon fichier dans une forme structurée comme je faisais en C grâce aux structures. Je travaille avec des classes, peuvent-elles tenir lieu de structures ? Est-ce que je peux utiliser fread et fwrite comme en C (est-ce que ça se fait ?) ? Ou que dois-je utiliser à la place ?

D'avance, merci beaucoup de votre aide.
A voir également:

4 réponses

dje-dje
 
Il me semble que fread et fwrite fonctionne de la meme maniere en C et en C++.
Les classes peuvent tenir lieu de structure mais tu y perds l'interet de programmer en oriente objet(la question se resume alors a pourquoi utiliser le C++ si je n'ai pas besoin de l'objet...)
a+
dje-dje
0
maryy Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   1
 
En fait, je voudrais garder l'esprit objet, je ne veux pas faire une appli objet avec des fonctions que l'on utilise en C, c'est clair que ça y perdrait tout son intérêt.

J'ai trouvé ça :
fout.write((char*) &nom_objet, sizeof nom_objet);

Mais j'ai pas réussi à l'utiliser, en plus, les chaînes de caractères me posent pas mal de problèmes. M'enfin, pour les fichiers, ça reste assez mystérieux pour moi :)

Merci en tout cas !
0
tafiscobar Messages postés 1277 Date d'inscription   Statut Contributeur Dernière intervention   177
 
bon voila :
fichier de type :
ifstream : on n p qu'y ecrire
ofstream : on n p qu'y lire
fstream : on p y lire et y ecrire.
sinon, ds ta classe, tu p declarer un fichier de type FILE *
et reecrire les focntions fwrite et fread pour ta classe.
si t'as le msdn, ds index ecris fstream et t'auras toutes les infos, sinon, dis le moi et je t'envoies tout en mode text par mail
tafiscobar
0
maryy Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   1
 
Merci beaucoup, je vais m'y atteler :)
0
ichou12
 
g une intéro ce mardi mé je sé pa manipulé les fichiers en c++
donc je voudré bien kon maide 1 ti peu
merci
0
mamiemando Messages postés 33758 Date d'inscription   Statut Modérateur Dernière intervention   7 877
 
Pour du C++ plus besoin de fopen ou de FILE * tu peux te contenter d'utiliser des flux. Grosso modo tu as deux familles de flux :

1) les flux ouvert en lecture : (vois ça comme un FILE * ouverte avec un fopen(...,"r")) : c'est la classe std::istream. Un std::istream comporte en particulier std::cin (entrée standard, stdin en C) et les std::ifstream (fichier ouverts en lecture).

2) les flux ouvert en écriture : c'est la classe std::ostream. Parmi les std::ostream tu as std::cout (sortie standard, stdout en C), std::cerr (sortie d'erreur standard, stderr en C), et les std::ofstream.

Tu as 4 headers principaux pour manipuler des flux :
#include <istream> // inclue juste la classe std::istream
#include <ostream> // inclue juste la classe std::ostream
#include <fstream> // inclue les std::ofstream et std::ifstream
#include <iostream> // inclue istream, ostream, et configure std::cout et std::cerr

Pour manipuler un flux :

1) il faut commencer par l'ouvrir (avec le constructeur) si tu veux manipuler un flux autre que std::cin, std::cerr, std::cout
2) ensuite il faut tester si le flux est correctement ouvert (il suffit de passer le flux dans un if)
3) s'il est ouvert tu peux le manipuler (opérateur << pour écrire dans un flux, opérateur >> pour lire dans un flux)
4) une fois terminé, et si ce flux s'est ouvert avec succès, tu es sensé fermer le flux (méthode close() ).

Un exemple concret :
#include <fstream>
#include <iostream>

int main(){
    const char *filename = "plop.txt";
    std::ofstream ofs(filename);
    if(ofs){
        std::cout << "Ecriture de " << filename << std::endl;
        ofs << "plop !" << std::endl;
        ofs.close();
    }else{
        std::cerr << "Impossible d'ouvrir " << filename
            << " en écriture !" << std::endl;
    }
    return 0;
}

Bonne chance
0