2010-12-07 62 views
6

J'essaie de lire l'ensemble du fichier file.txt dans un tableau char. Mais certaines questions, avoir des suggestions, veuillez] =Lire le fichier texte dans char Array. C++ ifstream

ifstream infile; 
infile.open("file.txt"); 

char getdata[10000] 
while (!infile.eof()){ 
    infile.getline(getdata,sizeof(infile)); 
    // if i cout here it looks fine 
    //cout << getdata << endl; 
} 

//but this outputs the last half of the file + trash 
for (int i=0; i<10000; i++){ 
    cout << getdata[i] 
} 
+0

Ou peut-être quelqu'un peut suggérer une meilleure façon de stocker un fichier texte dans un tableau de caractères. – nubme

+0

Si vous faites cela dans n'importe quelle application, assurez-vous de mettre des protections contre l'allocation de mémoire illimitée. – seand

+2

Vous semblez manquer des points-virgules. –

Répondre

1

Chaque fois que vous lisez une nouvelle ligne vous écrasez l'ancienne. Conserver une variable d'index i et utiliser infile.read(getdata+i,1) puis incrémenter i.

+0

merci, cela l'a fixé !!! =] – nubme

+2

'read (..., 1)' lit un caractère à la fois ... très inefficace. –

+0

infile.seekg (0, ios :: end); int len ​​= infile.peekg(); infile.seekg (0, ios :: beg); infile.read (getdata, len); – tmiddlet

2

Vous n'avez pas besoin de lire ligne par ligne si vous prévoyez d'aspirer le fichier entier dans un tampon.

char getdata[10000]; 
infile.read(getdata, sizeof getdata); 
if (infile.eof()) 
{ 
    // got the whole file... 
    size_t bytes_really_read = infile.gcount(); 

} 
else if (infile.fail()) 
{ 
    // some other error... 
} 
else 
{ 
    // getdata must be full, but the file is larger... 

} 
+0

Que faire si le fichier est plus grand que les caractères '10000'? – Nawaz

+0

@Nawaz qui serait la clause d'autre .... –

+0

.... et ce que vous allez faire là-bas? déclarer un autre tableau char de plus grande taille et relire? mal, n'est-ce pas? – Nawaz

2
std::ifstream infile; 
infile.open("Textfile.txt", std::ios::binary); 
infile.seekg(0, std::ios::end); 
size_t file_size_in_byte = infile.tellg(); 
std::vector<char> data; // used to store text data 
data.resize(file_size_in_byte); 
infile.seekg(0, std::ios::beg); 
infile.read(&data[0], file_size_in_byte); 
3

Utilisation std::string:

std::string contents; 

contents.assign(std::istreambuf_iterator<char>(infile), 
       std::istreambuf_iterator<char>()); 
+0

... a toujours eu des difficultés à mémoriser ce sort. Pas tout à fait intuitif. PS. Puisque OP a demandé un tableau char, 'contents.c_str()' peut être utile. – gluk47