0

トピックのように、次のコードを実行すると、.rdstate() は値 2 を返します。何が間違っていますか?

string logger_path_and_name("\"F:\\windowsqnx\\loggs\\logger_file.dat");

/* file to store simulation data */
std::ofstream fout( logger_path_and_name.c_str(), std::ios_base::out | std::ios_base::binary);

/* check if ios::binary supported */
if (!fout.is_open())
{
    std::cerr << "can't create file logger_file.dat\n";
    std::cerr << fout.rdstate();
    system("PAUSE");
    exit(EXIT_FAILURE);
}
4

1 に答える 1

0
"\"F:\\windowsqnx\\loggs\\logger_file.dat"

あなたの問題は、これがに変わること"F:\windowsqnx\loggs\logger_file.datです。ご覧のとおり"、最初は孤児です。

これは2つの方法で修正できます。1.\"最後にもう1つ配置します。\"2.最初にを削除します

ちなみに、ios :: rdstateはビットマスクタイプを返し、情報を取得する方法はiostateフラグbitwise AND or ORを使用することです。

ここから恥ずかしそうに盗まれた例:

// getting state of stream object
#include <iostream>
#include <fstream>
using namespace std;

int main () {
  ifstream is;
  is.open ("test.txt");
  if ( (is.rdstate() & ifstream::failbit ) != 0 )
    cerr << "Error opening 'test.txt'\n";
  return 0;
}
于 2013-01-27T00:17:02.307 に答える