2010-12-07 11 views
6

मैं पूरे फ़ाइल.txt को चार सरणी में पढ़ने की कोशिश कर रहा हूं। लेकिन कुछ मुद्दों के साथ, सुझाव कृपया =]चार एरे में टेक्स्ट फ़ाइल पढ़ें। सी ++ 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

या हो सकता है किसी को एक चार सरणी में एक पाठ फ़ाइल को स्टोर करने के लिए एक बेहतर तरीका सुझा सकते हैं। – nubme

+0

यदि आप खिलौना ऐप के अलावा कुछ भी करते हैं तो सुनिश्चित करें कि आप असीमित स्मृति आवंटन के खिलाफ सुरक्षा डालते हैं। – seand

+2

आपको कुछ अर्धविराम गायब लगते हैं। –

उत्तर

1

हर बार जब आप एक नई लाइन पढ़ते हैं तो आप पुराने को ओवरराइट करते हैं। इंडेक्स वैरिएबल I रखें और infile.read(getdata+i,1) का उपयोग करें, फिर I increment i।

+0

धन्यवाद, यह तय है !!! =] – nubme

+2

'पढ़ें (..., 1)' एक समय में एक चरित्र पढ़ता है ... बहुत अक्षम है। –

+0

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

2

यदि आप पूरी फ़ाइल को बफर में चूसने की योजना बना रहे हैं तो आपको लाइन से लाइन पढ़ने की आवश्यकता नहीं है।

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

क्या होगा यदि फ़ाइल '10000' वर्णों से बड़ी है? – Nawaz

+0

@ नवाज जो कि अन्य खंड होगा .... –

+0

.... और आप वहां क्या करने जा रहे हैं? बड़े आकार की एक और चार सरणी घोषित करें और फिर से पढ़ें? गलत, है ना? – 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

उपयोग std::string:

std::string contents; 

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

... हमेशा इस जादू को याद करने में परेशानी थी। काफी सहज नहीं है। पीएस। चूंकि ओपी ने एक चार सरणी का अनुरोध किया है, इसलिए 'content.c_str() 'उपयोग किया जा सकता है। – gluk47