Pourquoi mon fichier de sortie vide dans ce programme simple en utilisant std::fstream?
J'essaie de comprendre comment lire les informations de la forme d'un fichier d'entrée et d'écrire des données dans un fichier de sortie. Je comprends comment lire un fichier et affichage de son contenu, mais je NE comprends pas comment écrire dans un fichier ou d'afficher son contenu. Mon programme fonctionne très bien mais quand je vérifie ma sortie de fichier txt, il n'y a rien dedans! Que pouvais-je fait de mal?
le fichier d'entrée contient 3.1415 2.718 1.414.
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
int main()
{
float fValue;
fstream inputFile;
ofstream outputFile;
inputFile.open("C:\\Users\\David\\Desktop\\inputFile.txt");
outputFile.open("C:\\Users\\David\\Desktop\\outputfile.txt");
cout << fixed << showpoint;
cout << setprecision(3);
cout << "Items in input-file:\t " << "Items in out-put File: " << endl;
inputFile >> fValue; //gets the fiest value from the input
while (inputFile) //single loop that reads(from inputfile) and writes(to outputfile) each number at a time.
{
cout << fValue << endl; //simply prints the numbers for checking.
outputFile << fValue << ", "; //writes to the output as it reads numbers from the input.
inputFile >> fValue; //checks next input value in the file
}
outputFile.close();
inputFile.close();
int pause;
cin >> pause;
return 0;
}
- Que le code est erroné, puisque vous avez
cout << fValue
deux fois sansinputFile >> fValue
entre. Je serais prêt à parier que le fichier n'a pas pu ouvrir - Vous avez oublié de vérifier le code d'erreur après l'ouverture d'un fichier! 🙂 Il ne réussit pas toujours!
- Votre code "fonctionne" pour moi (il écrit la première valeur deux fois).
Vous devez vous connecter pour publier un commentaire.
Sur windows, il est probable que vous avez le fichier de sortie ouvert avec quelque chose comme le bloc-notes et votre programme C++ n'est pas de l'ouverture du fichier de sortie. Si il ne peut pas ouvrir le fichier, le ofstream::fonction d'ouverture en silence à l'échec. Vous devez vérifier l'état de outputFile après que vous tentez de l'ouvrir. Quelque chose comme
Si le statut de outputFile n'est pas ok, alors vous pouvez faire
et
jusqu'les vaches viennent à la maison et que vous n'aurez pas de sortie.
outputfile.flush();
Comme David N. mentionné, fstreams de ne pas les jeter par défaut lorsque le fichier ne s'ouvre pas, ou le flux pénètre dans un mauvais état à un certain moment au cours de l'écriture. Vous pouvez les jeter sur erreur en définissant le ofstream::exceptions drapeau à "ofstream::failbit n' | ofstream::badbit'. Vous pouvez trouver plus d'informations sur le masque d'exception ici:
http://www.cplusplus.com/reference/iostream/ios/exceptions/
Il est recommandé de définir le masque d'exception pour l'échec, parce que a) il évite des conditions de course et b) exige que les erreurs soient traitées et c) permettra le déroulement de pile qui est souvent pratique dans de grands programmes.
D'autre part, dans cette boucle:
La condition que vous devriez vérifier est inputFile.eof(). Cependant, je voudrais vous suggérer de le faire "à La C++ Chemin":
Notez l'utilisation des itérateurs et les std::copy() algorithme plutôt que de lire directement à partir du flux. Si vous voulez imprimer le contenu d'un fichier directement à std::cout, alors vous pouvez faire ceci:
Notez que, par défaut istream_iterators ignorer les espaces blancs, de sorte que vous avez à mettre en
file >> noskipws
dans le but d'éviter cela.HTH!
Gred
Vous devez fermer le fichier de sortie de la mémoire tampon pour être vidées dans le fichier avant d'effectuer votre demande de quitter.
int pause; cin >> pause;
Vous avez raison.outputFile.flush()
ououtputFile << endl;
(endl forces une chasse d'eau, comme le fait de clôture)Le code ressemble à enregistrer quelque chose dans le fichier. La logique est tout faux, mais quelque chose devrait être là. Vérifiez les membres de votre flux.