Pregunta

Estoy pidiendo al usuario un nombre de archivo, si entran en un nombre de archivo válido la primera vez, funciona. Sin embargo, si su nulo el primer tiempo, todos los demás comprobación falla. ¿Cómo iba a solucionar este problema? Además, digamos que sólo especifica un directorio, ¿cómo iba a obtener los nombres de todos los archivos de texto y cuántos hay?

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;
}
¿Fue útil?

Solución

Esto se debe a que los bits de error en el objeto 'INFILE' se han establecido.
Es necesario para restablecer los bits de error antes de hacer cualquier otra cosa.

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

Otros consejos

clara para restablecer el estado antes de la llamada a abrir.

En realidad, no necesita hacer uso de los indicadores de error, etc., que sólo puede llamar a la función inFile.is_open () para su comprobación. Usted no tendrá que utilizar inFile.clear () tampoco.

Si hacer una clara

si el usuario proporciona un directorio que tiene que hacer FindFirst y FindNext

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

y el proceso de todos los archivos de esa manera.

Borrar ella. Además, no es necesario la ruptura de su bucle, me gustaría sugerir este lugar:

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top