2011-07-12 3 views
0

L'essence de mon problème est que je ne peux pas écrire dans un fichier en boucle avec sleep(). Si j'ai le code suivant:Impossible d'écrire dans un fichier contenant une boucle contenant sleep()

ofstream file 
file.open("file.name"); 

for(;;) { 
    file << "HELLO\n"; 
} 

Ce code fonctionne parfaitement et imprime HELLO plusieurs fois dans "file.name". Cependant, je veux faire quelque chose comme ça (je l'enregistrement des données à partir d'une application en temps réel):

for(;;) { 
    file << "HELLO\n"; 
    sleep(1); 
} 

Cela ne semble pas imprimer quoi que ce soit dans mon dossier. Des idées?

+0

Comment la balise « C » être retirée? – KevinDTimm

+0

@KevinDTimm - en éditant la question :-) – Roddy

+0

@Roddy - J'ai essayé cela, je ne vois pas comment .... (oops, nevermind ---) – KevinDTimm

Répondre

6

Vous devez vider la sortie. Le flux de sortie met en mémoire tampon vos données en mémoire mais ne les écrit pas sur le disque. Vous devez utiliser soit std::endl (qui imprime une nouvelle ligne et vide) au lieu de la chaîne littérale '\n', ou rincer explicitement le flux avec std::flush:

for(;;) { 
    file << "HELLO" << endl; 
} 
// or 
for(;;) { 
    file << "HELLO\n" << flush; 
} 
+0

Excellent, merci! En attendant, j'ai fait une correction rapide en ouvrant et fermant à plusieurs reprises la poignée de fichier dans chaque itération de la boucle, qui doit avoir accompli le flush. – vette982

3

Le mot magique que vous cherchez est "flush".

c++ std::ofstream flush() but not close()

avant le sommeil, rincez le fichier afin qu'il ne soit pas en attente dans un tampon d'attente pour qu'il y ait assez d'un changement à la peine d'écrire sur.

2

C'est probablement juste un problème de mise en mémoire tampon. Comme vous écrivez maintenant beaucoup plus lentement, le tampon de sortie ne se remplira pas si vite que vous ne pourrez pas "voir" les données écrites. Essayez d'ajouter un flush() avant le sommeil.

file.flush() 
Questions connexes