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. 如您所见,一"开始您有一个孤儿。

您可以通过两种方式解决此问题。1.\"最后再放一个。2.去掉\"开头的

附带说明一下, ios::rdstate 返回一个 Bitmask 类型,您检索信息的方式是使用bitwise AND or ORiostate flags

这里可耻地被盗的例子:

// 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 回答