Запрашивать у пользователя имя файла или каталога - PullRequest
1 голос
/ 21 мая 2009

Я запрашиваю у пользователя имя файла, если он вводит правильное имя файла в первый раз, это работает. Однако, если он недействителен в первый раз, любая другая проверка завершится неудачно. Как бы я это исправить? Кроме того, скажем, они просто указывают каталог, как я могу получить имена всех текстовых файлов и сколько их есть?

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 ]

3 голосов
/ 21 мая 2009

Это потому, что биты ошибок в объекте 'inFile' были установлены.
Вам нужно сбросить биты ошибок, прежде чем делать что-либо еще.

if (!inFile)
{
    cout << "\n**File failed to open**\n\n";
    inFile.clear();
}
else break;
3 голосов
/ 21 мая 2009

Вызов сброс для сброса состояния перед открытием вызова.

0 голосов
/ 21 мая 2009

Очистите это. Кроме того, вам не нужен разрыв в вашем цикле, я бы предложил это вместо:

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)
0 голосов
/ 21 мая 2009

Да, сделать четкое

если пользователь предоставляет каталог, вам нужно выполнить FindFirst и FindNext

msdn.microsoft.com / EN-US / библиотека / zyzxfzac (VS.71) .aspx

и обработать все файлы таким образом.

0 голосов
/ 21 мая 2009

Вам не нужно использовать флаги ошибок и т. Д., Вы можете просто вызвать функцию inFile.is_open () для проверки. Вам также не нужно использовать inFile.clear ().

...