在c ++中加载和读取多个文件

时间:2014-08-04 12:10:05

标签: c++ c++11

我有一个程序,要求我从多个文件中读取,然后读取这些文件的每一行。

我所拥有的代码非常混乱,看起来非常糟糕,以至于它无法正常工作。

void load_servers()
{
    vector<string> files;
    DIR* dir;
    dirent* pdir;

    dir = opendir("./servers");
    while (pdir = readdir(dir))
    {
        files.push_back(pdir->d_name);
    }

    for (int i = 2; i < files.size(); i++)
    {
        cout << files[i] <<endl;
    }

    ifstream f;

    for (int i = 2; i < files.size(); i++)
    {
        f.open(files[i].c_str());
        string str;
        vector<string> svr;
        while (getline(f, str))
        {
            svr.push_back(str);
        }
        cout << svr[0] << endl;
//        servers.push_back(SERVER(svr[0], sve[1], svr[2]));
    }
}

点击cout << svr[0] << endl;

时会立即崩溃

运行Windows 8.1和MinGW 4.9

1 个答案:

答案 0 :(得分:0)

如果std::getline()失败,则svr中将无任何内容,svr[0]将访问未分配的内存。

我建议你在你的程序中加入一些错误检查,因为期望一切都能完成,这是非常乐观的。

例如:

for (int i = 2; i < files.size(); i++)
{
    // declaring the ifstream inside the loop should
    // ensure its resources get cleaned up each iteration
    ifstream f(files[i].c_str());

    if(!f.is_open()) // check the open actually worked
    {
        std::cerr << "ERROR: opening file: " << files[i] << '\n';
        continue; // skip rest of loop
    }

    string str;
    vector<string> svr;
    while (getline(f, str))
    {
        svr.push_back(str);
    }

    if(svr.empty())
    {
        std::cout << "File empty: " << files[i] << '\n';
        continue;
    }

    // process vector here

    cout << svr[0] << endl;
}