我有一个程序,要求我从多个文件中读取,然后读取这些文件的每一行。
我所拥有的代码非常混乱,看起来非常糟糕,以至于它无法正常工作。
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
答案 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;
}