Предлагаемые ответы рискованны, так как имеют гоночные условия.Если вы не можете гарантировать, что никто никогда не создаст этот файл, пока вы выполняете этот тест, вы не должны использовать его.
В качестве обходного пути используйте непереносимый метод (в Linux, например, открыть с помощью O_CREAT | O_EXCL).
Вы можете использовать результирующий дескриптор с кодом, например, boost, чтобы обернуть его в ofstream, или в этом случае использовать open () только для проверки, а затем создать новый ofstream в файле (последний не предполагает, что никтоудаляет / переименовывает промежуточный файл и, таким образом, может по-прежнему иметь состояние гонки).
C ++, не обеспечивающий ЛЮБОГО безопасного способа создания файла, - плохая шутка и, вероятно, причина многих пробелов в безопасности.Вы должны любить стандарты, которые поощряют плохие практики, делая невозможным написание правильного кода.