Проверка расширения для потока 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;
}