2010-11-14 6 views
0

Je veux écrire dans un fichier nommé "TEXT" et ajouter au fichier chaque fois que j'exécute le programme. Il compile mais ne prend pas de contribution. S'il vous plaît aider; Je suis nouveau à la programmation.écrire dans un fichier

Voici le code que je travaille avec:

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

main() 
{ 
    string line; 
    ifstream file; 
    file.open("TEXT",ios::in |ios::app); 

    if (file.is_open()) 
    { 
     while (file.good()) 
     { 
      getline (file,line); 
      cout << line << endl; 
     } 
     file.close(); 
    } else 
     cout << "Unable to open file"; 
} 
+6

Si vous voulez écrire dans le fichier, alors pourquoi avez-vous ouvrir pour entrée et lire de lui? –

+0

Ce code est si loin de ce que vous voulez, vous pouvez tout recommencer à zéro. – Johnsyweb

Répondre

0

Ce programme ouvre avec succès « TEXT » pour la lecture et imprimer son contenu stdout ...


Si vous voulez lire d'entrée, vous devez readline de stdin:

getline(cin, line); 

au lieu de

getline (file,line); 

Ensuite, vous devrez ouvrir file pour écrire (en utilisant ios::out drapeau au lieu de ios::in, et sans ios::app) et écrire là-dedans au lieu que dans stdout:

file << line << endl; 

au lieu de

cout << line << endl; 
+0

pouvez-vous pls faire le changement dans le code ... quand je cours ce qu'il ne prend pas l'entrée ... – arjun

+0

J'ai répondu dans la réponse, car il a fallu trop de lignes. – peoro

4

Je ne suis pas sûr de ce que vous voulez faire, mais voici quelques opérations d'entrée/sortie de base s sur un fichier texte. J'espère que cela aide.

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

int main() 
{ 
    string line; 
    ifstream input("TEXT", ios::in); // Opens "TEXT" for reading 

    if(input.fail()) 
    { 
     cout << "Input error: could not open " << "TEXT" << endl; 
     exit(-1); 
    } 


    while(getline(input, line)) 
    { 
     cout << line << endl; // prints contents of "TEXT" 
    } 

    input.close(); // close the file 

    ofstream output("TEXT", ios::app); // opens "TEXT" for writing 
    if(output.fail()) 
    { 
     cout << "Output error: could not open " << "TEXT" << endl; 
     exit(-1); 
    } 

    output << "I am adding this line to TEXT" << endl; // write a line to text 
    output.close(); // close the file 

    return 0; 
} 
3

Pour écrire dans le fichier plutôt que d'y lire, vous avez besoin essentiellement de changer le type de file à un flux de sortie (ofstream), file-cin et cout-file. Vous pouvez également simplifier un certain nombre de choses. Un flux convertira automatiquement en une valeur vraie si l'opération suivante réussit, et une erreur en cas d'échec, de sorte que vous pouvez tester un flux simplement en y faisant référence. Il n'y a rien de mal avec (par exemple) while (file.good()), ce n'est pas aussi idiomatique que while (file).

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

int main() { 
    string line; 
    string fname="TEXT"; 
    /* You can open a file when you declare an ofstream. The path 
     must be specified as a char* and not a string.[1] 
    */ 
    ofstream fout(fname.c_str(), ios::app); 

    // equivalent to "if (!fout.fail())" 
    if (fout) { 
     while (cin) { 
      getline(cin,line); 
      fout << line << endl; 
     } 
     fout.close(); 
    } else { 
     /* Note: errno won't necessarily hold the file open failure cause 
      under some compilers [2], but there isn't a more standard way 
      of getting the reason for failure. 
     */ 
     cout << "Unable to open file \"" << fname << "\": " << strerror(errno); 
    } 
} 

Références:

  1. Why don't the std::fstream classes take a std::string?
  2. Get std::fstream failure error messages and/or exceptions