В C++17 есть std::filesystem::exists.
В более ранних версиях C++ можно после открытия сразу перейти в конец файла и посмотреть текущую позицию. Если позиция 0, то файл либо был пустой при открытии, либо вновь только что созданнался. После этого надо опять вернуться на начало файла.
Вместо ofstream можно использовать функцию std::fopen, там можно с помощью параметра mode запретить открывать не существующий файл. Если функция вернет пустой FILE*, то либо файл не существует, либо произошла другая ошибка. Можно дальше проанализировать значение переменной errno, чтоб отделить ситуацию отсутствия файла от других возможных ошибок, но это уже платформозависимо.
Так же можно использовать API ОС для проверки существования файла. В линукс - stat(..).