Проверка расширения для потока ofstream

Работаю с потоком ofstream. В консоли я спрашиваю имя файла и записываю в переменную path. И потом я открываю с него поток. Если файла с таким названием не было, то он создается, но создается с никаким расширением, а мне надо .txt. (Например, пользователь вводит 123, создается файл 123.txt. А если вводит 123.txt, то так и должно остаться)

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>

using namespace std;
const int N = 200;
typedef int Matrix[N][N];

string GetPath()
{
    string path;
    getline(cin, path, '\n');
    return path;
}


void PrintMatrix(Matrix m, string path, int n)
{
    ofstream f(path);
    f.open(path);
    f << n << endl;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            f << setw(10) << m[i][j];
        }
        f << endl;
    }
}






int main()
{
    string path;
    int work=5;
    Matrix mat;


    

    path = GetPath();
    if (path == "")
        path = "out.txt";


    PrintMatrix(mat, path, work);

    for (int i = 0; i < 5; i++) //выводим полученный массив
    {
        for (int j = 0; j < 5; j++)
        {
            cout << " " << mat[i][j];
        }
        cout << endl;
    }


}

Ответы (1 шт):

Автор решения: megorit
#include <iostream>
#include <filesystem>
#include <fstream>

namespace fs = std::filesystem;

int main(int argc, char** argv)
{
    if (argc != 2)
        { std::cerr << "Invalid number of parameters\n"; return 1; }

    fs::path file_path{argv[1]};

    if (file_path.extension() != ".txt")
        file_path.replace_filename(file_path.filename().string()+".txt");

    std::clog << file_path << std::endl;

    if (fs::exists(file_path) && !fs::is_regular_file(file_path))
        { std::cerr << "The file " << file_path << " is not regular\n"; return 2; }

    std::ofstream ofstream{file_path};

    ofstream << "test output\n";

    return 0;
}
→ Ссылка