2016-08-24 1 views
0

Le problème que je suis confronté est le suivant: si nous définissons quelque chose commeComment utiliser fstream, pour écrire des valeurs différentes dans un fichier txt

ofstream myFile; 

    myFile.open("Directory//debug.txt"); 
    for (int i = 0; i < 10; i++) 
    { 
    myFile << i << endl; 
    myFile.close(); 
    } 

la sortie dans le fichier de débogage sera 9. Je veux faire en sorte qu'il produise tous les nombres de 0 à 9. Mis à part la fermeture du fichier après l'instruction for est-il possible de définir un ofstream qui ferait cela?

+1

* Pourquoi * voulez-vous fermer le flux dans la boucle? Et êtes-vous opposé à * l'ouvrir * dans la boucle? – Beta

+3

Après la première écriture, vous écrivez dans un fichier fermé. Ceci n'est pas autorisé. Pourquoi ne fermez-vous pas le fichier après la boucle for? – Chris

+1

Donc, si vous voulez fermer dans la boucle, cela vous dérange-t-il de rouvrir le fichier dans la boucle? – user

Répondre

1

Non Vous avez deux options:

Fermez le fichier en dehors de la boucle:

myFile.open("Directory//debug.txt"); 
for (int i = 0; i < 10; i++) 
{ 
    myFile << i << endl; 
} 
myFile.close(); 

ou ouvrir le fichier en mode append et à proximité dans la boucle:

for (int i = 0; i < 10; i++) 
{ 
    myFile.open("Directory//debug.txt", ios_base::app); 
    myFile << i << endl; 
    myFile.close(); 
} 
+0

La configuration que j'ai est que j'appelle une fonction 'foo' à plusieurs reprises dans une fonction' goo' Je crée le fichier dans 'foo' et je veux sortir un nouvelle valeur à chaque fois que 'foo' est appelée dans' goo' –

+0

L'ouverture en mode ajout ressemble exactement à ce dont j'ai besoin, pouvez-vous également fournir la syntaxe? Je sais que je pourrais chercher, mais quand même. –

+0

@sjsam Je suis sûr qu'il sort une nouvelle valeur de 'i'. Je veux dire que je viens de le tester. Les deux versions fonctionnent, c'est-à-dire avec une variable statique et une simple ouverture en mode ajout. –

1
myFile.close(); 

doit être placé après la boucle for. Introduisez également une vérification d'erreur pour voir si le open a été un succès.

J'appelle une fonction foo à plusieurs reprises dans une fonction goo je crée le fichier dans foo et je veux sortir une nouvelle valeur à chaque fois que foo est appelée dans goo.

Pour atteindre votre objectif, vous pouvez utiliser une variable statique à l'intérieur foo

void foo() 
{ 
static int count=0;  
ofstream myfile; 
myfile.open("Directory//debug.txt",std::fstream::app) 

if (myfile.is_open()) // Checking is file is successfully opened. 
{ 
    count++; 
    myfile<<count<<"\n"; 
} 
myfile.close; // Close the file 
} 
+0

La configuration que j'ai est j'appelle une fonction foo à plusieurs reprises dans une fonction goo je crée le fichier dans foo et je veux sortir une nouvelle valeur chaque fois que foo est appelé dans goo. Existe-t-il un moyen de contourner ce problème? –

+0

Merci. C'est aussi une bonne solution, c'est dommage que je ne puisse pas accepter deux réponses @ La réponse d'owacoder était plus proche de ce que j'imaginais donc j'ai accepté ça. –

+0

@VahagnTumanyan: Aussi, vous devez introduire une vérification d'erreur, Aussi la boucle for-avec votre solution d'origine est complètement inutile. – sjsam