2009-12-20 6 views
1

Je veux lire puis stocker le contenu d'un fichier dans un tableau, mais cela ne fonctionne pas:
simple C++ flux de fichier

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

int main() { 
    string content,line,fname; 
    cout<<"Execute: "; 
    cin>>fname; 
    cin.ignore(); 
    cout<<endl; 
    //Doesn't work: 
    ifstream myfile(fname); 
    if(!myfile.is_open()){ 
     cout<<"Unable to open file"<<endl; 
    }else{ 
     while(!myfile.eof()){ 
      getline(myfile,line); 
      //I don't know how to insert the line in the string 
     } 
     myfile.close(); 
    } 
    cin.get(); 

    return 0; 
} 
+1

Je ne suis pas tout à fait sûr que je suis, voulez-vous stocker chaque ligne dans le contenu de std :: string ou dans un tableau? Si c'est le cas, vous pouvez faire du contenu + = ligne. Si vous voulez stocker chaque ligne séparément, je vous conseille d'utiliser un vecteur std :: à la place d'un tableau. Il vous sauvera le mal de tête. – Skurmedel

+1

Faire ceci: 'while (! Myfile.eof())' est généralement faux. Voir DanDan ci-dessous. –

Répondre

7

2 choses. Lors de la création de votre ifstream, vous devez passer un caractère *, mais vous transmettez une chaîne. Pour résoudre ce problème, écrire:

ifstream myfile(fname.c_str()); 

En outre, pour ajouter la ligne au contenu, appelez la méthode "ajouter":

content.append(line); 

Il fonctionne pour moi :)

Si vous avez réellement voulez stocker chaque ligne séparément, stocker chaque ligne dans un vecteur de chaîne, comme a dit Skurmedel.

+0

La méthode append ne fait pas casser la ligne :( –

+0

Nevermind, je viens d'ajouter + "\ n" –

+0

Eh bien, je n'ai pas testé le code avec plus d'une ligne dans le fichier, mon mauvais;) –

2

remplacer

while(!myfile.eof()){ 
     getline(myfile,line); 
} 

avec

char c;  
    while(myfile.get(c)) 
    { 
     line.push_back(c); 
    } 
+1

Bien que lire le fichier char par char ne soit pas génial, vous semblez être le seul à savoir comment utiliser 'eof' correctement. +1 – avakar

2

Vous essayez donc de lire le contenu d'un fichier dans une chaîne, ou vous voulez que chaque ligne soit une entrée de tableau?

Si le premier, après avoir appelé getline(), vous devrez ajouter la ligne (+= est un raccourci pour ajouter) content += line;.

Si ce dernier, créez un vecteur de chaînes et appelez content.push_back(line).

Les chaînes ont une méthode .c_str() qui renvoie un tableau char, vous devez donc probablement appeler ifstream myfile(fname.c_str()).