Consider the following code snippet:
const char * filePath = "C:/blah.mtt";
fstream fs(filePath, ios::in | ios::out | ios::binary);
if (fs.fail())
std::cout << "Failed to open the file!\n";
the fs.fail() check succeeds always. Does it mean that I can't open a file in both read write mode at the same time?
Creating an empty file first and then running the above code, fs.fail() is false always. What is the rational for such a behavior by the fstream class?
Note: I do have requisite permissions for creating the file. I am trying this on windows 10 using VS2015
No, you can do this, but the question is whether you can create a file by doing so.
Generally you'll need to add the
truncflag (ironically one of the options for how to handle an existing file), or remove theinflag (see here).Yes, this is a bit of a pain, but it comes from how the original POSIX APIs work. Blame them!
You can always open a file that exists (well, subject to permissions). That behaviour makes sense.