Bonjour,
Voila comme le titre l'indique, je voulais savoir quelle fonction en C++ correspond
au fread en C.
Merci d'avance![]()
Bonjour,
Voila comme le titre l'indique, je voulais savoir quelle fonction en C++ correspond
au fread en C.
Merci d'avance![]()
la classe "fstream" avec le mode d'ouverture "ios::binary" puis la méthode "read":
http://www.cppreference.com/cppio/read.html
Envoyé par glnewb
On peut parfaitement prendre fread sous C++ mais on ne pourra pas enregistrer/lire des instances de classe.
Il faut prendre fstream comme seriousme l'indique
Je sais qu'on peut prendre fread mais bon vu que je fais la lecture avec les fstream et qu'il prend un FILE * en parametres, c'est moyen de l'utiliser :pEnvoyé par mat.M
Jvais aller voir du coté du lien de seriousme!
Merci!
Bon alors voila, j'ai l'impression que mes octets ne sont pas lu.
En résumé, j'ecris une classe pour lire les images PGM.
A la fin, il y a donc les octets en niveaux de gris (il y en a width*height de l'image, parametres recupérés précédemment).
Donc je dois surment mal comprendre le fonctionnement de la fonction read.
Voila en gros comment je fais :
Si j'ai compris le fonctionnement, read met chaque octet dans le tableau img jusqu'a la fin du fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ifstream ifs; ifs.open("test.pgm",ios_base::in | ios_base::trunc & ios_base::binary); unsigned char *img=new unsigned char[width*height]; ifs.read((char *)img,1);
Voila, je voulais savoir si c'etait bon ce que jai fait et aussi savoir si le cast du unsigned char en char change qqchose?
On en a déjà parlé il n'y a pas longtemps...![]()
le post : http://www.developpez.net/forums/sho...d.php?t=190329
une solution : on peut faire un truc comme ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 std::ifstream iFile("test.pgm"); std::istream_iterator<unsigned char> beginFile(iFile); std::istream_iterator<unsigned char> endFile; std::vector<unsigned char> vTab(beginFile, endFile);
Je pense pas que tu es compris mon probleme.
Mon probleme n'est pas la taille du tableau mais la facon de lire des octets dans un fichier a la maniere de fread.
Tu es passé à côté des implications de la réponse de superspag. Réponse qui avit une petite erreur. C'est istreambuf_iterator qu'il faut utiliser pour les fichiers non texte (aka binaire).
Cette solution est non seulement capable de réaliser la lecture, mais également d'agrandir le buffer destination au besoin. Je ne saurais pas dire à quel point elle est efficace ou non, je ne me suis pas amusé à faire des mesures de perfs.
Sinon, effectivement, c'est std::istream::read qu'il te faudra utiliser.
Si on suppose que tu connais le nombre d'octets que tu dois récupérer, cela donne:
Et c'est tout. Le buffer est dans le vecteur, on en fait ce que l'on veut après.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 std::ifstream f("toto.dat", std::ios_base::in | std::ios_base::binary); // D'ailleurs tes options d'ouverture me paraissaient assez bizarre. if (!f) throw ... std::vector<unsigned char> v(size); if (! f.read(reinterpret_cast<char*>(&v[0]), v.size())) throw ....
Reste à rajouter les vérifications si on veut pouvoir lire tout ce qui est dispo, même s'il manque des données.
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
Merci pour ta reponse, effectivement ca ne venait pas de ma fonction read le probleme mais bel et bien de comment j'ouvrais mon fichier.
Partager