2010-12-07 16 views
6

Tüm file.txt dosyasını bir char dizisine okumaya çalışıyorum. Ancak bazı sorunlar, öneri lütfen =]Metin dosyasını char Array'e okuyun. 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

Veya birisi bir char diziye bir metin dosyası saklamak için daha iyi bir yol önerebilirsiniz. – nubme

+0

Bunu bir oyuncak uygulamasında yaparsanız, sınırsız bellek ayırmaya karşı koruma sağladığınızdan emin olun. – seand

+2

Bazı noktalı virgülleri kaçırıyor görünüyorsunuz. –

cevap

1

Eğer yeni bir satır okumak her zaman sahip Eskisini üzerine. Bir indeks değişkeni I tutun ve infile.read(getdata+i,1) kullanın sonra i artış.

+0

teşekkürler, bu düzeltildi! =] – nubme

+2

'read (..., 1)' bir seferde bir karakteri okur ... çok verimsiz. –

+0

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

2

Tüm dosyayı bir arabelleğe almayı planlıyorsanız satır satır okumazsınız.

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

Dosya 10000’den büyükse ne var? – Nawaz

+0

@Nawaz bu başka bir şey olur .... –

+0

.... ve orada ne yapacaksın? Daha büyük boyutta bir başka char dizisi ilan edip tekrar okuyun? yanlış değil mi? – 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

Kullanım std::string:

std::string contents; 

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

... her zaman bu büyüyü ezberleyen sıkıntılar vardı. Oldukça sezgisel değil. PS. OP bir char dizisi istediğinden, content.c_str() 'kullanılabilir. – gluk47