循环检查文件的存在并处理它

时间:2012-10-04 16:28:10

标签: c++ while-loop fstream ifstream file-processing

我正在开始学校作业的第一部分,我必须提示用户输入文件名,检查文件是否存在,如果存在,打开它进行处理;否则我要让用户输入另一个文件名。

当我编译并运行下面的程序时,我收到错误消息“没有文件存在。请输入另一个文件名。”当我输入不存在的文件的名称时,它只会再次运行我的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);
 }
}

3 个答案:

答案 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
}