Link Le 26/07/2006 à 01:30 C'est pas plutôt le streambuf, qu'il faudrait redéfinir ?

Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.
Sisi, mais tu crées aussi un stream autour. Très simple en réalité, il se contente d'encapsuler le stream standard, en lui passant un streambuf différent.
Mais si tu crées pas un stream qui va bien, t'es obligé de laisser cette opération à l'utilisateur de ton code, et c'est franchement moche.
je comprends pas trop ce que tu veux dire quand tu dis que mon truc ça fait bricolage?
Je reprend quasiment la même façon de procéder qu'avec les FILE et gzFile classiques.
L'utilisateur n'a qu'à préciser FILEIO_normal, FILEIO_gzip ou FILEIO_bzip selon ce qu'il désire au moment d'ouvrir le fichier. Il peut décider du niveau de compression (w-1 pour choix auto, w0 pour aucune compression et w9 pour le max)
il utilise ensuite "read", "write", "tell" et seek" pour les entrées et sorties.
je viens de rajouter l'opérateur >>, il suffit de faire
*fichier >> "un truc";pour écrire dans le fichier ce qui simplifie
fichier->wrtie("un truc",strlen("un truc"));Quoi de plus simple???
Avantage des fstream ?
Bah vu que c'est la facon de gerer des fichiers en C++, t'as tout ce qui est exception etc. (et la surcharge d'operateurs est quand mm pas mal sympa).
Enfin, c'est quand mm vachement plus simple de faire: myFile << myClass; plutot que de se faire chier avec fopen/fwrite/fclose et dans tous les cas, comme dit Spectras, c'est la facon normale de le faire en C++.
Une classe c'est pas pour faire joli ou un simple conteneur... y'a les structures de C pour ca, c'est quand meme avant tout pour *simplifier* le developpement en adoptant une structure objet.
Vu que s'est pour être utilisé dans une fonction répétée des milliers de fois, ça ne risque pas d'être "moins performant" que les fopen & co?
Par contre je suis d'accord sur le fait que les << sont pratiques. Mais pour des données binaires?
Considerablement moins performant, ca m'etonnerait pas mal.
OK je vais me remettre dessus alors
Les performances sont équivalentes. C'est juste que le C présente un jeu de fonctions, alors que le C++ présente un jeu d'objets.
A mon avis, les fonctions C auraient dû être supprimées du C++ ça aurait sûrement évité pas mal de programmes "hybrides".
Je pense notamment à fopen/fread/fwrite/strlen/strcpy/strcat/printf....
Pour les données binaires, les flux C++ sont génériques. Autrement dit, toi tu t'occupes d'implémenter le flux qui compresse. La gestion des <<, du binaire / caractère / etc c'est pas toi qui la fait, c'est un autre objet standard C++ qui va s'interfacer avec le tien.
OK je m'amuse un peu avec les stream et c'est vrai que ça simplifie énormément les tâches.
Par contre j'avoue que je n'ai pas percuté comment les utiliser avec la lib tar (le but étant de lire/écrire des fichiers .tar.gz)
Mon IA avance à grands pas, il me reste encore 2,3 trucs dont le format de fichier et là je bloque...
Y'a pas un wrapper C++ qui existe pour la lib tar ? Ca te faciliterait grandement la vie (quoique ca doit pas etre bien dur a faire...)
Je n'en ai pas trouvé pour les fichiers TAR, seulement pour les GZ : gzstream (encore que je ne comprends pas pourquoi j'ai les erreur "référence indéfinie vers ..." alors que la lib est bien incluse, je compile sans pb les exemples mais pas mon projet?!??)
Pour le moment je n'utilise que les ofstream et ifstream, j'ai viré tous les FILE fopen, fclose et autres
Ton code m'interresse, je veux bien tenter de le porter sur gcc4 (si les sources sont dispo)
J'ai les sources de gzstream pour m'aider à comprendre comment faire (j'en ai jamais fait) mais un petit coup de pouce est toujours le bienvenue!