用户输入文件名打开文件

时间:2016-05-04 04:26:58

标签: c++ file filenames

(已解决)(我不知道如何关闭它)我正在尝试接受用户输入来打开我的源文件中的.dat文件,但我不知道为什么文件无法打开。我已经检查了语法和其他东西,但我找不到解决方案。

#include <iostream>
#include <string>
#include <fstream>
#include "arrayFunctions.h"

using namespace std;

int main()
{
   string fileName;
   int size = 0;
   ifstream inputFile;
   do
   {
      cout << "Please enter file name: ";
      getline(cin,fileName);

      inputFile.open(fileName.c_str());
      if (!inputFile)
      {
         cout << "The file \"" << fileName << "\" failed to open.\n"
              << "Check to see if the file exists and please try again" 
              << endl << endl;
      }
      while (inputFile.good())
      {
          string stop = " ";
          string num;
          getline(inputFile, stop);
          size++;
      }
    } while (!inputFile);

    cout << size << endl << endl;
    inputFile.close();

    system("pause");
}

问题似乎在于实际打开文件,因为这会失败

do
{
    ifstream inputFile("num.txt");
    opened = true;
    if (!inputFile.is_open())
    {
        cout << "The file \"" << fileName << "\" failed to open.\n"
             << "Check to see if the file exists and please try again" 
             << endl << endl;
        opened = false;
    }
    inputFile.close();
} while (!opened);

1 个答案:

答案 0 :(得分:0)

我认为你的问题是inputFile是在堆栈上定义的对象,所以将它直接放入if语句可能并不是在做你认为它正在做的事情 - 它&# 39; s总是作为对象的引用,永远不会为null。

如果您隐式将ifstream转换为布尔值,我不太清楚会发生什么。

尝试更改此

if (!inputFile)

<击>到

<击>
if (!inputFile.is_open())

<击>

我已经了解了流的引用,特别是good()方法的功能。实际上,它太宽泛,无法推断出错的原因 - 可能是硬盘错误,权限错误,文件名错误等等。

如果您使用类似的内容(改编自C ++参考)显示错误消息,您将更清楚地了解正在发生的事情:

if (!inputFile.good()) {
  cout << "The file \"" << fileName << "\" failed to open.\n"
  cout << "good()=" << inputFile.good();
  cout << " eof()=" << inputFile.eof();
  cout << " fail()=" << inputFile.fail();
  cout << " bad()=" << inputFile.bad();
}