Как в передать переменную типа 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 шт):

Автор решения: occlusion.cpp

Судя по всему проблема именно в пути, или расположении файла. Запустил данный код на 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)
→ Ссылка