重复输入的文件流

时间:2018-04-09 05:51:42

标签: c++ do-while ifstream

我尝试创建一个重复菜单,允许用户在程序无法打开文件时重新输入文件名。

现在,如果我输入现有文件的名称,它可以正常工作,但如果该文件不存在,则会打印"未找到文件"然后执行程序的其余部分。我是文件流的新手,这里的大部分代码都是通过引用找到的。我对目前的情况有点失落,以及处理这种情况的最佳方法是什么。任何指导都将不胜感激。

typedef istream_iterator<char> istream_iterator;    

string fileName;

ifstream file;

do {        
    cout << "Please enter the name of the input file:" << endl;
    cin >> fileName;

    ifstream file(fileName.c_str());

    if (!file) {
        cout << "File not found" << endl;
    }

} while (!file);

std::copy(istream_iterator(file), istream_iterator(), back_inserter(codeInput));

3 个答案:

答案 0 :(得分:3)

构造对象file后将始终存在,因此循环条件始终失败。将条件更改为文件是否未正确打开。

do {
...
}
while (!file.is_open())

答案 1 :(得分:2)

此代码可以使用。

do {
    std::cout << "Please enter the name of the input file:" << std::endl;
    std::cin >> fileName;

    file = std::ifstream(fileName.c_str());

    if (!file) {
        std::cout << "File not found" << std::endl;
    }

} while (!file);

您的错误是您有2个文件变量的定义。 while (!file)中使用的变量是在do-while循环外定义的变量,默认情况下有效状态设置为true。

答案 2 :(得分:0)

除了@ acraig5075回答:

编写类型然后变量名称(ifstream file)是创建一个新变量。显然你知道这一点,但如果你再次使用相同的名称,例如一个循环,它会产生一个新的,不同的变量。

ifstream file; // a unique variable
...
do {
    ...
    ifstream file(fileName.c_str()); // another unique variable

...所以将循环内的用法改为:

    file.open(fileName.c_str());