我正在开始学校作业的第一部分,我必须提示用户输入文件名,检查文件是否存在,如果存在,打开它进行处理;否则我要让用户输入另一个文件名。
当我编译并运行下面的程序时,我收到错误消息“没有文件存在。请输入另一个文件名。”当我输入不存在的文件的名称时,它只会再次运行我的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);
}
}
答案 0 :(得分:2)
要检查文件是否已成功打开,您必须使用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()检查其他内容,而不是文件是否已成功打开。
答案 1 :(得分:1)
我不是100%确定你的意图是什么,但你知道你这里只有一个循环吗?在你的do / while循环之后,你有一些大括号中的代码,但是它没有连接到任何循环结构......它只是一个新的范围(这里没有用处)。
所以,你的程序是这样做的:
1)询问文件名。试着打开它。如果可以读取文件流,请执行“在此处输入代码”部分。
2)检查文件流是否“坏”。如果是,请返回步骤1.否则,继续。
3)打印出“没有该名称的文件”,提示输入新文件,尝试打开它
这几乎肯定不是你想要的。
答案 2 :(得分:1)
您可以使用c代码。
FILE *fp = fopen("file" "r");
if(fp){
//do stuff
}
else{
//it doesnt exist
}
侧面说明,当使用命名空间std时,尝试使其不是全局
你可以在必要时把它放在你的功能中
int main(){
using namespace std;
//other std stuff
}