Передача абсолютного имени файла для чтения файла в переполнении стека

// Я пытаюсь прочитать файл внутри функции, вызывая функцию в main и передавая имя файла в качестве аргумента. Это дает ошибку при открытии файла. Но то же самое отлично работает, когда я передаю имя файла непосредственно файл («имя_файла»). Почему это так? Заранее спасибо.

#include<string>
#include<fstream>
void parse(string file_name)
{
ifstream file("file_name"); //opens file
if (!file)
{
cout<<"Cannot open file\n";
return;
}
cout<<"File is opened\n";
file.close(); //closes file
}

int main()
{
parse("abc.txt"); //calls the parse function
return;
}

1

Решение

Удалить цитаты вокруг file_name и убедитесь, что файл, используемый для ввода, присутствует в текущем рабочем каталоге (папке, в которой находится ваш исполняемый файл). Кроме того, если вы не используете c++11необходимо преобразовать строку в char* как это :

#include <string>
#include <fstream>
#include <iostream>
using namespace std;
void parse(string file_name)
{
ifstream file(file_name.c_str()); //opens file
if (!file)
{
cout<<"Cannot open file\n";
return;
}
cout<<"File is opened\n";
file.close(); //closes file
}

int main(){
string st = "abc.txt";
parse(st); //calls the parse function
return 0;
}
2

Другие решения

Удалить цитаты вокруг "file_name", Когда вы цитируете, вы командуете ifstream прочитать файл в рабочем каталоге называется file_name, Также убедитесь, что abc.txt находится в рабочем каталоге, который обычно является каталогом, в котором находится ваш исполняемый файл.

#include<string>
#include<fstream>
void parse(string file_name)
{
ifstream file(file_name.c_str()); //opens file (.c_str() not needed when using C++11)
if (!file)
{
cout<<"Cannot open file\n";
return;
}
cout<<"File is opened\n";
file.close(); //closes file
}

int main()
{
parse("abc.txt"); //calls the parse function
return;
}
1