Salut,
Pour r�pondre � ta question:fopen est une fonction issue du C, qui manipule typiquement des File Descriptor cach� dans la structure FILE.
Le C++ pr�f�re travailler sur base de flux de donn�es, dont les classes ifstream (i pour input, f pour file
) et ofstream (o pour output, f pour... file itou).
Elles sont cr��es de mani�re � fournir une interface commune quelle que soit la donn�e � lire (ou � �crire), et fonctionne "naturellement" quel que soit le type primitif utilis�, ainsi que s'il est n�cessaire d'�crire des chaines de caract�res.
Il est �galement possible de d�finir les op�rateurs de flux << (pour l'�criture) et >> (pour la lecture) de tes structures de donn�es personnalis�es
Il existe un principe nomm� RAII (Ressource Acquisition Is Initialisation) qui consid�re qu'il faut qu'une variable soit correctement initialis�e d�s le moment o� elle est d�clar�e.
Du point de vue des flux de fichier, cela se traduit par le fait que, d�s que l'on en d�clare un, il faut �tre en mesure de lire (ou d'�crire, selon le cas) dans ce fichier.
Le but est, en d�finitive, de simplifier le plus possible l'utilisation de ces flux 
Il existe un certain nombre de possibilit�s de cr�er un fichier, dont celle propos�e par 3DArchi (qui est celle � pr�f�rer aussi souvent que possible), qui n�cessite, pour une question purement historique, de fournir le nom du fichier sous la forme d'une chaine de caract�res "C style" (un tableau de caract�res termin� par un '/0'.
Tu peux donc d�cider de cr�er un flux de lecture dans un fichier sous la forme de
1 2
| std::ifstream ifs("mon_fichier.txt");
/* ici vient la lecture du fichier */ |
Mais, cela implique un probl�me de taille: la lecture ne pourra se faire que... dans mon_fichier.txt...
Si, par la suite, tu d�cider de cr�er un autre fichier qui pourrait �tre lu de mani�re identique � mon_fichier.txt, tu sera oblig� de... recopier exactement le m�me code pour ce deuxi�me fichier, ce qui, il faut l'avouer, n'est pas des plus efficaces 
L'id�e est donc de "factoriser" l'ouverture et la lecutre du fichier dans une fonction, et de fournir � cette fonction le nom du fichier sous la forme d'une chaine de caract�res que l'on souhaite ouvrir.
Pour manipuler les chaines de caract�res, nous utilisons la classe string, disponible dans l'espace de noms std par inclusion du fichier d'en-t�te <string> de pr�f�rence � toute autre alternative issue du C (dont les fameuses chaines de caract�res C style).
Pour passer une chaine de caract�res en param�tre d'une fonction qui ne doit pas modifier la chaine en question, l'id�al reste toujours de la transmettre sous la forme d'une r�f�rence constante.
Mais, l'aberration historique aidant, il faudra, uniquement pour permettre d'ouvrir le fichier, convertir cette chaine de caract�res de type string en une chaine de caract�res C style.
Il se fait qu'il est tr�s facile d'y arriver, car il existe une fonction membre de la classe string pr�vue � cet effet: la fonction membre c_str().
Tu en arrives donc � une fonction dont la forme sera proche de
1 2 3 4 5 6 7 8 9
| TypeDeRetour lecture(std::string const& filename)
{
/* ouverture du fichier */
std::ifstream ifs(filename.c_str());
/* lecture du fichier
* ...
* retour éventuel
*/
} |
Il sera ensuite assez facile de d�cider le fichier que tu veux lire en donnant simplement le nom de ce fichier comme argument � la fonction.
Cela peut prendre la forme "simple" de
lecture("mon_fichier.txt");
mais cela peut tout aussi bien prendre une forme plus complexe proche de
1 2 3 4 5 6 7 8 9 10 11 12 13
|
std::string tempname("c:\\");
/*rajoutons le chemin d'acces au fichier */
tempname+="Program Files\\mon application\\ data";
/* créons dix noms de fichiers à lire de manière dynamique */
for (int i = 1;i<=10;++i)
{
/*stringstream est un flux de conversion "bi directionnel" */
std::stringstream ss;
ss<<tempname<<"mon_fichier_"<<i<<".txt";
filename=ss.str();
lecture(filename);
} |
qui aura, selon l'exemple, comme r�sultat de lire les fichiers nomm�s resectivement mon_fichier_1.txt, mon_fichier_2.txt,(... tous les autres ...) ,mon_fichier_10.txt qui se trouvent dans c:\Program Files\mon application\data
Partager