无法读取ifstream加载的文件

时间:2010-12-25 18:37:10

标签: c++ ifstream

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

2 个答案:

答案 0 :(得分:3)

如果paths_in.good()一直失败,则意味着设置了一些流错误标志(badbiteofbitfailbit)。

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

这段代码做了一些不同的小事。

  1. std::ios::in不需要为std::ifstream明确指定。

  2. 它没有使用is_good,虽然这应该没问题,你可以将std::ifstream视为一个bool,当它处于良好状态时将是true

  3. getline()返回对其操作的流的引用,因此您可以将整行放在条件中。

  4. 化妆品,但如果它要超出范围,则无需明确关闭ifstream