2
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();
}

ロードしているファイルが存在しますが、他に何が間違っている可能性がありますか?path_in.goodは失敗し続けます。

編集:私はそれを理解しました。うわー、私はこれに対する答えに悩まされています。基本的に、Windowsではファイル拡張子を表示するかどうかを指定できます。このWindowsのインストールでは、拡張機能を表示しないように設定されています。したがって、ファイルを何度もチェックしていると、directory.txtが表示され、実際にはファイル名がdirectory.txt.txtであるのに、これはディレクトリですべてが正常であることを意味すると考えています。

4

2 に答える 2

3

失敗し続ける場合paths_in.good()は、ストリーム エラー フラグの一部が設定されていることを意味します ( badbiteofbitまたはfailbit)。

  • eofbit- ファイルの終わりに達しました
  • badbit- メモリ不足やストリーム バッファ内の例外など、ストリーム バッファに関するエラーがキャストされます。
  • failbit- eof 以外のエラーに達した

何が起こったのかを調べるには、最初にどのエラービットが設定されているかを確認してから、特定のエラーの詳細とその原因を調べる必要があります。

于 2010-12-25T19:17:48.430 に答える
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::ifstreambool として扱うことができます。true

  3. getline() は操作対象のストリームへの参照を返すため、その行全体を条件に入れるだけで済みます。

  4. ifstream表面的なものですが、範囲外に出ようとしている場合は明示的に閉じる必要はありません。

于 2010-12-25T21:06:36.120 に答える