0

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

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

3 回答 3

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() 检查其他内容,而不是文件是否成功打开。

于 2012-10-04T16:34:04.953 回答
1

我不能 100% 确定你的意图是什么,但你知道你这里只有一个循环吗?在你的 do/while 循环之后,你有一些大括号中的代码,但它没有连接到任何循环结构......它只是一个新的范围(在这里没有任何用途)。

所以,你的程序这样做:

1) 询问文件名。尝试打开它。如果可以读取文件流,请执行“在此处输入代码”部分。

2)检查文件流是否“坏”。如果是,则返回步骤 1。否则,继续。

3) 打印出“no file by that name”,提示输入新文件,尝试打开

这几乎肯定不是你想要的。

于 2012-10-04T16:35:18.193 回答
1

你可以使用c代码。

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

附带说明一下,当使用命名空间 std 时,请尝试使其不是全局的

您可以在必要时将其放在您的函数中

int main(){
using namespace std;
//other std stuff
}
于 2012-10-04T16:35:45.617 回答