Bonjour,
Voila comme le titre l'indique, je voulais savoir quelle fonction en C++ correspond
au fread en C.
Merci d'avance ;)
Version imprimable
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
Citation:
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 :pCitation:
Envoy� 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:
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... :roll:
le post : http://www.developpez.net/forums/sho...d.php?t=190329
une solution : on peut faire un truc comme �a
Code:
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:
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.
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.