Простой C ++ Файловый поток - PullRequest
1 голос
/ 21 декабря 2009

Я хочу прочитать, а затем сохранить содержимое файла в массиве, но это не работает:

#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;
}

Ответы [ 3 ]

7 голосов
/ 21 декабря 2009

2 вещи. При создании вашего ifstream вы должны передать символ *, но вы передаете строку. Чтобы это исправить, напишите:

ifstream myfile(fname.c_str());

Кроме того, чтобы добавить строку к содержимому, вызовите метод append:

content.append(line);

у меня работает :) 1007 *

Если вы действительно хотите хранить каждую строку отдельно, сохраняйте каждую строку в виде строкового вектора, как сказал Скурмедель.

2 голосов
/ 21 декабря 2009

Итак, вы пытаетесь прочитать содержимое файла в одну строку, или вы хотите, чтобы каждая строка была записью массива?

Если первое, после того, как вы позвоните getline(), вам нужно будет добавить строку (+= - это ярлык для добавления) content += line;.

Если последнее, создайте вектор строк и вызовите content.push_back(line).

В строках есть метод .c_str (), который возвращает массив символов, поэтому вам, вероятно, нужно вызвать ifstream myfile(fname.c_str()).

2 голосов
/ 21 декабря 2009

заменить

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

с

   char c;    
   while(myfile.get(c))
   {
        line.push_back(c);
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...