C++ 什么会导致在Stream::open中设置failbit

C++ 什么会导致在Stream::open中设置failbit,c++,ofstream,C++,Ofstream,当我尝试使用ofstream::open写入二进制文件时,failbit已设置,我无法写入该文件,异常原因是“basic_ios::clear”。这应该很简单,但我不知道我做错了什么 string fname ("/home/tim/data/kv.bin"); file.exceptions (std::ofstream::failbit | std::ofstream::badbit ); try { file.open (fname, ios::binary); } catch

当我尝试使用ofstream::open写入二进制文件时,failbit已设置,我无法写入该文件,异常原因是“basic_ios::clear”。这应该很简单,但我不知道我做错了什么

string fname ("/home/tim/data/kv.bin");

file.exceptions (std::ofstream::failbit | std::ofstream::badbit );

try
{
    file.open (fname, ios::binary);
}
catch (std::ofstream::failure e)
{
    string error (e.what());
}
从xterm中,我可以毫无问题地触摸列出的文件名,但每当我尝试以编程方式创建它时,它就会失败

我试过这个

FILE *fp;
if ((fp = fopen (fname, "w')) == NULL)
{
    int err = errno;
}
它打开文件时没有问题。我想我可以用C文件指针来写文件,但是我希望使用我剩余代码中使用的C++流保持一致。
有并没有办法弄清楚为什么ofstream::open会失败以及如何修复它?

我弄明白了。我之前在函数中使用了ofstream,在尝试使用其他文件名打开它之前没有关闭它


对不起,各位。

这可能是。投票关闭,除非问题被编辑为包含问题的根源,如中所述。我如何投票关闭?