Ответ 1
ios_base::in
требуется, чтобы файл существовал.
Если вы предоставляете только ios_base::out
, только тогда будет создан файл, если он не существует.
+--------------------+-------------------------------+-------------------------------+
| openmode | Action if file already exists | Action if file does not exist |
+--------------------+-------------------------------+-------------------------------+
| in | Read from start | Failure to open |
+--------------------+-------------------------------+-------------------------------+
| out, out|trunc | Destroy contents | Create new |
+--------------------+-------------------------------+-------------------------------+
| app, out|app | Append to file | Create new |
+--------------------+-------------------------------+-------------------------------+
| out|in | Read from start | Error |
+--------------------+-------------------------------+-------------------------------+
| out|in|trunc | Destroy contents | Create new |
+--------------------+-------------------------------+-------------------------------+
| out|in|app, in|app | Write to end | Create new |
+--------------------+-------------------------------+-------------------------------+
PS:
Некоторая базовая обработка ошибок также может оказаться полезной для понимания того, что происходит:
#include <iostream>
#include <fstream>
int main()
{
std::fstream file("triangle.txt");
if (!file) {
std::cerr << "file open failed: " << std::strerror(errno) << "\n";
return 1;
}
file << "Some text " << std::endl;
}
Вывод:
C:\temp> mytest.exe
file open failed: No such file or directory
C:\temp>