Как в передать переменную типа string, как имя файла в ifstream и ofstream соответственно
Когда пытался передать в in название файла, который хочу открыть, поток почему-то его не открывает и соответственно срабатывает проверка на открытие(вывод приведу ниже). Точно ошибка не в самом пути к файлу, что я передаю, так как пробывал все варианты, в том числе открываемый файл клал в той же директории, что и исполняемый. Вот код:
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <stdlib.h>
#include <filesystem>
string parser(string namefile, int j)
{
ifstream in;
fstream out;
vector<string> sub;
string s, d = " ", line, str1 = "../" + namefile + "_dep" + to_string(j) + ".xls";
int b, e = 0;
string ln;
bool t = false;
cout << namefile.c_str() << endl;
in.open(namefile.c_str());
out.open(str1.c_str());
if(in.is_open())
{
/*Колдуем с файлом*/
}
else
cout << "Ничего не получилось 2;(" << endl;
in.close();
out.close();
return NULL;
}
Пишу в VSCode через виртуальную машину, флаг стандарта "-std=c++20", компилятор "gcc".

Ответы (1 шт):
Судя по всему проблема именно в пути, или расположении файла. Запустил данный код на windows 11, gcc 13.1, ошибки он не выдал. Также создал test.txt файл в папке, в которой находится исполняемый файл.
Если вы используете ide или редактор кода (например vscode), то попробуйте запустить приложение напрямую, т.е. без запуска через ide/редактор кода, и соответственно создать в той же папке нужный вам файл. Конкретно в vscode, в launch.json есть параметр cwd который указывает на директорию, которую приложение будет считать текущей, и учитывать ее для относительных путей
main.cpp
#include <iostream>
#include <string>
#include <fstream>
#include <stdlib.h>
#include <vector>
using namespace std;
string parser(string namefile, int j)
{
ifstream in;
fstream out;
vector<string> sub;
string s, d = " ", line, str1 = "../" + namefile + "_dep" + to_string(j) + ".xls";
int b, e = 0;
string ln;
bool t = false;
cout << namefile.c_str() << endl;
in.open(namefile.c_str());
out.open(str1.c_str());
if(in.is_open())
{
cout << "was open" << endl;
}
else
cout << "wasn`t open" << endl;
in.close();
out.close();
return {};
}
int main(int argc, char** argv){
parser("test.txt", 1);
system("pause");
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.10.0)
project(sandbox VERSION 0.1.0 LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD_REQUIRED 20)
add_executable(sandbox main.cpp)