Цикл, чтобы проверить наличие файла и обработать его

Я начинаю первую часть школьного задания и должен предложить пользователю ввести имя файла, проверить наличие файла и, если он существует, открыть его для обработки; в противном случае мне нужно, чтобы пользователь ввел другое имя файла.

Когда я компилирую и запускаю свою программу ниже, я получаю сообщение об ошибке «Файл не существует. Пожалуйста, введите другое имя файла». Когда я набираю имена файлов, которые не существуют, он просто снова запускает первую часть цикла do while. Я новичок в C ++, но я делал это раньше, и я чувствую, что он должен работать правильно. Любая помощь будет оценена.

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

struct customerData
{
int _customerID;
string _firstName, _lastName;
double _payment1, _payment2, _payment3;
};

void processFile();

int main()
{
processFile();

system ("pause");
return 0;
}

void processFile()
{
string filename;
ifstream recordFile;

do
{
cout << "Please enter a filename\n";
cin >> filename;
recordFile.open(filename);
if (recordFile.good())
// {
//  enter code for if file exists here
// }
;
}
while(recordFile.fail());
{
cout << "No file by that name. Please enter another filename\n";
cin >> filename;
recordFile.open(filename);
}
}

-1

Решение

Чтобы проверить, был ли файл успешно открыт, вы должны использовать функцию std :: fstream :: is_open (), например:

void processfile ()
{
string filename;

cout << "Please enter filename: ";
if (! (cin >> filename))
return;

ifstream file(filename.c_str());
if (!file.is_open())
{
cerr << "Cannot open file: " << filename << endl;
return;
}

// do something with open file
}

Функции-члены .good () и .fail () проверяют что-то еще, не был ли файл открыт успешно.

2

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

Я не уверен на 100%, каково ваше намерение здесь, но вы понимаете, что у вас здесь только один цикл? После цикла do / while у вас есть некоторый код в фигурных скобках, но он не связан ни с какой конструкцией цикла … это просто новая область (которая здесь не используется).

Итак, ваша программа делает это:

1) Спросите имя файла. Попробуй открыть. Если поток файла можно прочитать, выполните часть «введите код здесь».

2) Проверьте, является ли файловый поток «плохим». если это так, вернитесь к шагу 1. В противном случае продолжите.

3) Распечатайте «нет файла с таким именем», запросите новый файл, попробуйте открыть его

Это почти наверняка не то, что вы хотите.

1

Вы можете использовать код c.

FILE *fp = fopen("file" "r");
if(fp){
//do stuff
}
else{
//it doesnt exist
}

примечание: при использовании пространства имен std попытайтесь сделать его не глобальным

вы можете поместить его в свои функции вместо этого, когда это необходимо

int main(){
using namespace std;
//other std stuff
}
1
По вопросам рекламы [email protected]