J'ai le code suivant, en cours d'exécution sur SUSE 10.1 / G ++ 4.1.0, et il n'écrit pas dans le fichier: Le fichier est correctement créé et ouvert, mais vider.
Si je change le code sur: p> (ajoutez un Toute suggestion? P> P> \ n code> au texte), cela fonctionne.
J'ai aussi essayé de rincer l'Ofstream, mais cela n'a pas fonctionné. P>
5 Réponses :
fait travail? p> endl insère une nouvelle ligne et rougit le tampon. Est-ce ce que vous faisiez appelé quand vous avez dit que vous avez déjà essayé de le rincer? P> p>
Je ne sais pas si c'est ce que vous avez essayé mais que vous devriez faire: mise à jour em>; Je quitte cette réponse ici à cause des commentaires utiles forts> p> basé sur les commentaires, je modifierai mes conseils: vous ne devriez pas avoir à appeler explicitement Supply force explicitement une E / S opération qui peut ne pas être la manière la plus optimisée. Reportant aux iostreams et au système d'exploitation sous-jacent serait mieux. P> Évidemment, le problème de l'OP n'était pas lié à appeler ou à ne pas appeler std: : affleurant code> (ou
fichier.flose () code> d'ici la matière), car le destructeur le fait pour vous. p>
std :: flush code>, et était probablement dû à la tentative de Lisez le fichier avant que le destructeur de flux de fichiers soit appelé. p> p>
Le destructeur ofstream code> doit automatiquement affleurer.
@Omnifarious: cela mérite un bowvote? Est-ce que ma réponse mal i>?
@John Weldon - C'est faux parce que cela ne traite pas vraiment du problème réel des OPS. Il pourrait être utile de déboguer et de déterminer ce que le vrai problème est (et devrait être un commentaire), mais n'est pas une solution en soi. S'il s'agit d'une solution, il suggère une solution de style cargo-culte dans laquelle on insère un code sans comprendre pourquoi il doit être là.
Bien sûr, personne d'autre ne suggère vraiment une solution non plus. Toutes les réponses sont essentiellement des suggestions de débogage. Mais la plupart d'entre eux sont au moins formés comme des suggestions de débogage. Je n'aurais pas été évité si cela n'avait pas eu de uppote ou si cela avait été formé comme une suggestion de débogage au lieu d'une solution.
@Très varié; Ne serait-ce pas d'accord pour dire que vous I> Devriez-vous I> Rincer le flux avant de la clôtrer, plutôt que de compter sur le destructeur?
@John Weldon, non, je n'es accepterais pas que vous devriez le faire. Le rinçage est un détail de mise en œuvre. Le modèle conceptuel du fichier est que vous y écrivez avec l'opérateur <<< / code>. C'est
de Sstream code> la responsabilité de maintenir ce modèle dans tous les contextes raisonnables. Je ne dois qu'à atteindre et à tripoter avec les détails de la mise en œuvre dans des cas spécifiques où j'ai besoin du fichier réel et du modèle présenté par
detream code> pour correspondre à un instant particulier.
@Très varié; Je vais vous différer, je pense que votre cas est convaincant.
C'est faux parce que cela suggère que le destructeur de detream code> n'a pas rincé, quand il fait en fait.
Si vous vérifiez votre fichier sur un CAT CODE>, il peut s'agir de votre coquille à tort configuré et n'imprime pas la ligne s'il n'y a pas de fin de ligne.
std :: endl code> ajoute un
\ n code> et strong> rinçage. p>
Ouais, essayez de faire fichier de chat; echo code>. N'utilisez pas indignement
endl code>. Je déteste le code qui utilise cette construction stupide et je souhaite que les normes les gens le suppriment de la norme. Le rinçage est cher et devrait toujours être fait consciemment et avec prévoyance.
Le problème était l'éditeur de buggy utilisé dans mon travail qui ne montre pas la ligne s'il n'y a pas de '\ n' à la fin. De toute évidence, VI le montre bien. Merci.
le destructeur doit affleurer et fermer le fichier. strong> p>
Je suis sûr que l'erreur est un autre endroit, soit P>
1) Vous ne vérifiez pas au bon moment. A quel point comparez-vous le contenu du fichier, "Après" les sorties ou définissez-vous un point d'arrêt avant la sortie du programme, puis vous vérifiez le contenu des fichiers? P>
2) d'une manière ou d'une autre, le programme se bloque avant qu'il ne sort? P>
Ouais, si le programme comme étant donné des courses et une fois que cela est complètement terminé et que vous récupérez votre retour, il ne contient pas les données, il y a un bogue quelque part.
Vous travaillez sur Linux, qui est un système compatible POSIX. Standard de POSIX définit ce qu'est une ligne une séquence de caractères zéro ou plus non nouvelle ligne plus un
Termination du caractère Newline. P>
blockQuote>
Donc, sans le caractère de nouvelle ligne, le fichier contient 0 lignes et est donc vide. P>
Comment vérifiez-vous le fichier résultant?
Le programme sur Debian / SID avec g ++ 4.4.4 fonctionne comme prévu et fichier.out contient la chaîne (sans nouvelle ligne). Essayez de mettre à jour votre compilateur ou OS - les deux sont obsolètes.
Comment vérifiez-vous si le fichier est vide? Faites cela sur le fichier résultant: WC et voir quelle est la sortie. Il devrait être 0 2 11. 0 lignes, 2 mots, 11 caractères. Sans la nouvelle ligne, la sortie "Hello World" se heurtera à votre invite, alors vous pourriez simplement vous manquer.