提示用户输入文件名或目录

时间:2009-05-20 22:45:21

标签: c++ file filenames istream

我提示用户输入文件名,如果他们第一次输入有效的文件名,它就可以了。但是,如果第一次无效,则每次其他检查都会失败。我该如何解决这个问题?另外,假设他们只是指定一个目录,我如何获取所有文本文件的名称以及有多少文件?

int main() {

    ifstream inFile;
    int result;
    string filename;

    cout << "If the executable is not in the same directory as the\nfile, then a directory needs to be provided\n\n";
    while (true) {
        cout << "Enter the file name:  ";
        getline(cin, filename);
        inFile.open(filename.c_str(), ios::in);

        if (!inFile)
            cout << "\n**File failed to open**\n\n";
        else break;
    }

    result = countLOC(inFile);
    cout << "\nThere are " << result << " lines of code in \"" << filename << "\"\n\n";

    inFile.close();
    return 0;
}

5 个答案:

答案 0 :(得分:3)

调用clear以重置打开电话之前的状态。

答案 1 :(得分:3)

这是因为已经设置了对象'inFile'中的错误位 在执行任何其他操作之前,您需要重置错误位。

if (!inFile)
{
    cout << "\n**File failed to open**\n\n";
    inFile.clear();
}
else break;

答案 2 :(得分:0)

您不需要使用错误标志等,只需调用inFile.is_open()函数进行检查即可。您也不需要使用inFile.clear()。

答案 3 :(得分:0)

是的,做一个明确的

如果用户提供了您需要执行FindFirst和FindNext

的目录

msdn.microsoft.com/en-us/library/zyzxfzac(VS.71)的.aspx

并以这种方式处理所有文件。

答案 4 :(得分:0)

清除它。此外,你不需要循环中断,我建议这样做:

do {
    if (infile.fail())
       cout << "\n**File failed to open**\n\n";
    infile.clear()
    cout << "Enter the file name:  ";
    getline(cin, filename);
    inFile.open(filename.c_str(), ios::in);
} while(!infile)