Я хочу, чтобы пользователь мог ввести имя файла и отобразить информацию в файле. Я использовал ifstream для чтения переменной, но он возвращает только ошибку. Я реализовал ошибку, чтобы знать, нашла ли программа файл или нет. Я не знаю, должна ли переменная находиться в папке программы. Честно говоря, я не знаю, как его изменить, чтобы он работал.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
string f_user;
string l_user;
int main(){
cout<< "What is your first name?";
cin >> f_user;
cout<< "What is your last name?";
cin >> l_user;
string file_name= f_user + l_user + ".txt";
ifstream inFile(file_name);
if (inFile.is_open()){
string c;
while (getline(inFile, c)){
cout<< c;
}
}
if (inFile.fail()){
cout << "User not Found"<< endl;
}
inFile.close();
}
Где заявлен f_user? Показанный код не скомпилируется. Аналогично для l_user.
@seraphim Отредактируйте вопрос, не добавляйте код в комментарий.
Пожалуйста, используйте функцию редактировать, чтобы обновить свой пост, а не добавлять новую информацию в комментариях.
@seraphim Итак, настоящая проблема в том, что код не находит файлы, которые, по вашему мнению, должны быть?
вам необходимо указать полный путь к файлу при вызове конструктора ifstream. К вашему сведению, вы пытаетесь прочитать файл, а не переменную.
@subram - это не обязательно так. Если файл находится в текущем каталоге, вы можете открыть его, указав только его имя.
Да, я думаю, проблема в том, что он не находит файл. Поскольку я поставил оператор if (inFile(fail)) и он возвращает «Пользователь не найден».





файл может существовать, но getline может выйти из строя.
в этом случае fail() вернет true.
Чтобы отличить это, сделайте что-нибудь, что:
if (inFile.is_open()){
string c;
while (getline(inFile, c)){
cout<< c;
}
} else {
cout << "User not Found"<< endl;
}
Обратите внимание, что файл может не открыться по многим причинам, а не только потому, что он не существует. Стандартная библиотека не скажет вам, почему, поэтому рассмотрите возможность использования std::filesystem::exists() или его эквивалента, если вам нужно различать. Конечно, это приводит к гонке TOCTOU, так что будьте осторожны.
спасибо, оказывается, файл находился за пределами папки, в которой хранится код.
Если это не удается из-за того, что он ищет не в том каталоге, и вы не знаете, в каком, воспользуйтесь следующей идеей: создайте файл вместо его чтения. Затем просмотрите весь жесткий диск и найдите этот файл.
string file_name= f_user + l_user + ".txt";
file_name = "haha"; // use a made-up unique file name
ofstream hack;
hack.open(file_name);
Запустите этот код, найдите файл и удалите код.
Проблема представленного здесь кода заключается в том, что вы не объявили переменные
f_userиl_user. Вам нужно что-то вродеstring f_user, l_user;в началеmain.