2010-11-03 4 views
1

J'essaie d'écrire un programme qui modifie un fichier .txt d'un répertoire de variables. Cependant quand j'essaye de faire ainsi j'obtiens une erreur.Modifier un fichier .txt d'un répertoire de variables

Mon erreur:

no matching function for call to `std::basic_ofstream<char,  std::char_traits<char> >::basic_ofstream(std::string&)' 

Mon code:

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

int main() { 
    string file_name ; 
    cout << "Input the directory of the file you would like to alter:" << endl; 
    cin >> file_name ; 


    ofstream myfile (file_name); 
    if (myfile.is_open()) 
    { 
    myfile << "This is a line.\n"; 
    myfile << "This is another line.\n"; 
    myfile.close(); 
    } 
    else cout << "Unable to open file"; 
    return 0; 

} 

Qu'est-ce que je fait de mal?

+0

Vous n'avez pas besoin d'appeler 'myfile.close()'; le destructeur 'ofstream' fermera automatiquement le fichier pour vous. Lorsque vous lisez l'entrée d'un flux (comme vous le faites avec 'cin >> nom_fichier'), vous devez toujours vérifier que l'entrée a réussi. Lorsque vous lisez une chaîne, il est peu probable que l'opération échoue, mais si vous lisez quelque chose d'autre (comme un numéro quelconque), les échecs sont plus probables. –

Répondre

6

Les constructeurs fstream prennent des chaînes C, pas std::string, vous avez donc besoin

std::ofstream myfile(file_name.c_str()); 

La raison pour laquelle ils prennent les chaînes C au lieu de std::string s est purement historique; il n'y a pas de raison technique. C++ 0x ajoute des constructeurs qui prennent std::string s.

Questions connexes