Création et lecture de fichier en C++.

Résolu
Messages postés
40
Date d'inscription
samedi 24 juillet 2004
Statut
Membre
Dernière intervention
24 octobre 2005
-
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
-
Bonjour à tous. Alors voila mon problème: Je n'arrive pas à créer un fichier comme je le souhaite. Le fichier est créer mais il est vide.

42 réponses

Messages postés
371
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
23 septembre 2009

Ne tend pas de perche à Joky... il serait capable de relancer sur l'histoire de tampon.

Bon rapidement, les yeux fermés...

int main()
{
string entree;
string tampon;
ofstream fichier("joky.txt");
cout << "Quelques instructions:\nPour QUITTER, tapez\t\t#exit\nPour SAUVEGARDER, tapez\t\t#save" <<endl;
do
{
cin>>entre;
if (entere == "#save")
{
fichier<<tampon;
tampon.clear();
cout <<"Sauvegarde terminer"<<endl;
}
else if( entree != "#exit" )
tampon+=entree;
}
while ( entre != "#exit");
}
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
Que veux tu?

___________________________________________________________
Magicalement
Nono
Messages postés
40
Date d'inscription
samedi 24 juillet 2004
Statut
Membre
Dernière intervention
24 octobre 2005

Je veux savoir commet lire et écrire un fichier en c++.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Me semble logique, un fichier à sa création est toujours vide.

ciao...
BruNews, MVP VC++
Messages postés
40
Date d'inscription
samedi 24 juillet 2004
Statut
Membre
Dernière intervention
24 octobre 2005

Oui mais je veux aussi le remplir. Voici un morceau de mon prog.

#include
#include <string>
#include <fstream>

using namespace std;

int main()
{
int entre; //Variable qui stocke les données entré par l'utilisateur.

do
{
cin>>entre;

if (strcmp (entre, "save")) //Si l'utilisateur tape "save", il y a création d'un fichier.
{
ofstream fin ("sauvegarde.txt"); //Sauvegarde.
}

while (strcmp ( entre,"exit");

etc............

Mais je ne sais pas comment entrer les données de l'utilisateur dans le fichier.
De même, je ne sais pas lire un fichier.
Alors, comment on fait???
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Ah mé int entre = "save" t'as le temps d'attendre lol

char *szEntry;

scanf("%s", &szEntry);



if(strcmp(szEntry, "save") == 0)

{

//chaine identique...

}



Un bon début non ? :)

void Aurevoir( void ); //Bonne journée
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
char *szEntry;

si tu fais un scanf sur un pointeur qui ne pointe nulle part....

Allez Joky on se réveille.

ciao...
BruNews, MVP VC++
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Ah la la j'ai autant l'air con que lui maintenant lol

char szEntry[256+1];



désolé
void Aurevoir( void ); //Bonne journée
Messages postés
371
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
23 septembre 2009

On ne compare par un int à une chaine....

Pour écrire dans ton fichier, tu dois utiliser l'opérateur <<. Par exemple :

int entre = 0;
cin >> entre;
ofstream fin ("sauvegarde.txt"); //Sauvegarde.
fin << "bonjour" << "\n" << "la saisie est égalle à : " << entre << endl;
Messages postés
40
Date d'inscription
samedi 24 juillet 2004
Statut
Membre
Dernière intervention
24 octobre 2005

Bon voila sa marche mais quand j'enregistre, mon programme n'enregistre que le dernier mot de mon texte.
Comment faire pour tout sauvegarder?
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
y a jamais rien d'obligé en prog,

il n'est pas obligé de passer par les flux,

et peux passer par les fonctions standard

ex:



int rep=fprintf(m_fichier,"%s",(const char*)txt);

if(rep < 0)

//Signaler erreur

...;






nota: si on perd à utiliser ces fonctions, merci de m'expliquer quoi et pourquoi...


___________________________________________________________
Magicalement
Nono
Messages postés
371
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
23 septembre 2009

312076 deguelatore : Donne ton code.

=180080 magic_Nono : La demande portait sur une ouverture/ecriture en C++ et tu proposes un exemple en C.....

Cordialement,
Xterminhate.
Messages postés
40
Date d'inscription
samedi 24 juillet 2004
Statut
Membre
Dernière intervention
24 octobre 2005

Voici mon code:

include
#include <fstream>
#include <string>
using namespace std;


//On débute avec la fonction principal. C'est à dire 'main'.
int main()
{
char entre[500]; //Variable dans laquelle sont stockées les données entré par l'utilisateur.

cout << "Quelques instructions:"<<endl; //Mode d'emploi.
cout <<" Pour QUITTER, tapez #exit" <<endl;
cout <<" Pour SAUVEGARDER, tapez #save" <<endl;

do //Début de la boucle DO...WHILE.
{
cin>>entre; //L'utilisateur entre les données.


if (strcmp (entre,"#save")= = 0)
{
ofstream fin ("sauvegarde.txt"); //Création du fichier "sauvegarde.txt".
fin << "# DEBUT DE LA SAUVEGARDE #"<<endl; //En tête de la sauvegarde.
fin <<""<<endl;
fin << entre <<endl; //Enregistrement des données.
fin <<""<<endl;
fin << "# FIN DE LA SAUVEGARDE #"<<endl;
cout <<"Sauvegarde terminer"<<endl;

}

}
while (strcmp (entre,"#exit")); //Tant que l'utilisateur ne tape pas 'exit' le
//programme continue de tourner.


return 0; //Arrêt du programme quand l'utilisateur tape 'exit'
}
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Ne l'ouvre pas à chaque fois, laisse le ouvert une fois pour toute

ou bien ferme le à chaque foi :)

void Aurevoir( void ); //Bonne journée
Messages postés
40
Date d'inscription
samedi 24 juillet 2004
Statut
Membre
Dernière intervention
24 octobre 2005

Alors, si je veux fermer le fichier je dois taper:

fin.close( )


Mais comment veux tu que je le laisse ouvert une fois pour toute?
Messages postés
371
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
23 septembre 2009

La fermeture est automatique à la fin du bloc dans lequel le flux a été ouvert. L'utilisation de fsteram:close() est souvent inutile.

L'idéal est de créer ton flux au debut du main(). Il se fermera automatiquement à la fin du main().

Cordialement,
Xterminhate.
Messages postés
40
Date d'inscription
samedi 24 juillet 2004
Statut
Membre
Dernière intervention
24 octobre 2005

Ok merci. Bon, mais comment faire pour enregistrer toutes les phrases que j'écris dans le fichier. Par ce que le problème est que j'enregistre que le dernier mot.
Messages postés
371
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
23 septembre 2009

En laissant ouvert ton fichier !!!

Cordialement,
Xterminhate.
Messages postés
371
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
23 septembre 2009

A chaque itération tu créées un nouveau fichier... rien de surprenant que ce soit seulement la dernière itération qui est sauvegardée.

Cordialement,
Xterminhate.
Messages postés
40
Date d'inscription
samedi 24 juillet 2004
Statut
Membre
Dernière intervention
24 octobre 2005

Oui, mais on fait comment pour laisser le fichier ouvert?