ifstreamでファイルが正常に開かれたかどうかを確認する

c++ ifstream io
ifstreamでファイルが正常に開かれたかどうかを確認する

読み取り用にファイルを開く次のものがあります。 ただし、ファイルが正常に開いたことを確認するためにチェックしたいので、フラグが設定されているかどうかを確認するために失敗を使用しています。 ただし、次のようなエラーが表示され続けます。

Cから来ているので、私はC ++が初めてです。 だから私はこのエラーを理解しているかわからない:

_
メンバー関数「bool std :: basic_ios <_CharT、_Traits> :: fail()const [with _CharT = char、_Traits = std :: char_traits]」をオブジェクトなしで呼び出すことはできません
_

コード:

int devices::open_file(std::string _file_name)
{
    ifstream input_stream;

    input_stream.open(_file_name.c_str(), ios::in);

    if(ios::fail() == true) {
        return -1;
    }

    file_name = _file_name;

    return 0;
}

  17  2


ベストアンサー

あなたは単にこれを行うことができます:

int devices::open_file(std::string _file_name)
{
    ifstream input_stream;
    input_stream.open(_file_name.c_str(), ios::in);
    if(!input_stream)
    {
        return -1;
    }
    file_name = _file_name;
    return 0;
}

fail()は静的メソッドではないため、型ではなくインスタンスで呼び出す必要があります。したがって、fail()を使用する場合は、上記のコードで !input_stream`を input_stream.fail() `に置き換えてください。

ここで何を達成しようとしているのか疑問に思う必要があります。 ファイルを開いて、すぐに再び閉じます。 ファイルが存在するかどうかを単に確認しようとしていますか?

19


エラーは、 `ios

fail()`が実際にメンバーメソッドであるときに静的メソッドとして使用しているためです。

if (input_stream.fail())
{
    ...
}

3


`std

ifstream :: is_open`を使用することもできます。 ファイルが開いており、このストリームオブジェクトに関連付けられている場合、trueを返します。

// ifstream::is_open
#include      // std::cout
#include       // std::ifstream

int main () {
  std::ifstream ifs ("test.txt");

  if (ifs.is_open()) {
    // print file:
    char c = ifs.get();
    while (ifs.good()) {
      std::cout << c;
      c = ifs.get();
    }
  }
  else {
    // show message:
    std::cout << "Error opening file";
  }

  return 0;
}

3


ストリームオブジェクトでfail()を呼び出す必要があります。 これを行うより慣用的な方法は次のとおりです。

input_stream.open(_file_name.c_str(), ios::in);

if( ! input_stream ) {
    return -1;
}

1


タイトルとURLをコピーしました