void bot_manager_item::create_games()
{
games.clear();
std::ifstream paths_in("C:\\Users\\bill hank\\Documents\\bot_plugins\\directory_listing.txt", std::ios::in);
while (paths_in.good())
{
send_message("The path was good.");
char q[5000];
paths_in.getline(q, 5000);
send_message(q);
games.push_back(qanda(q));
}
paths_in.close();
}
我正在加载的文件存在,还有什么可能是错的? paths_in.good一直都在失败。
编辑:我明白了。哇,我对此答案感到恼火。基本上Windows允许您说明是否要显示文件扩展名。此Windows安装设置为表示不应显示扩展名。所以,当我一次又一次地检查文件时,我看到:directory.txt并认为这意味着目录的一切都很好,实际上文件名是directory.txt.txt
答案 0 :(得分:3)
如果paths_in.good()
一直失败,则意味着设置了一些流错误标志(badbit
,eofbit
或failbit
)。
eofbit
- 已达到文件结尾badbit
- 流缓冲区出错,例如内存不足或流缓冲区内的异常被强制转换failbit
- 已达到eof旁边的其他错误为了找出发生的情况,您需要先检查设置了哪个错误位,然后找出有关特定错误的更多信息,以及可能导致错误的原因。
答案 1 :(得分:1)
出于好奇,此代码是否正确输出文件的内容?如果此代码有效,那么问题就是其他问题。如果此代码不起作用,那么这可能意味着该文件不是您指定的位置,或者您没有读取权限。
void bot_manager_item::create_games() {
std::ifstream paths_in("C:\\Users\\bill hank\\Documents\\bot_plugins\\directory_listing.txt");
char q[5000];
while (paths_in.getline(q, 5000)) {
std::cout << q << std::endl;
}
}
这段代码做了一些不同的小事。
std::ios::in
不需要为std::ifstream
明确指定。
它没有使用is_good,虽然这应该没问题,你可以将std::ifstream
视为一个bool,当它处于良好状态时将是true
。
getline()返回对其操作的流的引用,因此您可以将整行放在条件中。
化妆品,但如果它要超出范围,则无需明确关闭ifstream
。