I am trying to open an output file which I am sure has a unique name but it fails once in a while. I could not find any information for what reasons the ofstream constructor would fail.
EDIT:
It starts failing at some point of time and after that it continuously fails until I stop the running program which write this file.
EDIT:
once in a while = 22-24 hours
code snippet ( I don’t this would help but still someone asked for it )
ofstream theFile( sLocalFile.c_str(), ios::binary | ios::out );
if ( theFile.fail() )
{
std::string sErr = " failed to open ";
sErr += sLocalFile;
log_message( sErr );
return FILE_OPEN_FAILED;
}
Too many file handles open? Out of space? Access denied? Intermittent network drive problem? File already exists? File locked? It’s awfully hard to say without more details. Edit: Based on the extra details you gave, it sounds like you might be leaking file handles (opening files and failing to close them and so running out of a per-process file handle limit).
I assume that you’re familiar with using the
exceptionsmethod to control whetheriostreamfailures are communicated as exceptions or as status flags.In my experience, the
iostreamclasses give very little details on what went wrong when they fail during an I/O operation. However, because they’re generally implemented using lower-level Standard C and OS API functions, you can often get at the underlying C or OS error code for more details. I’ve had good luck using the following function to do this.