Domanda

sto chiedendo all'utente per un nome di file, se entrano in un nome di file valido per la prima volta, funziona. Tuttavia, se non valida La prima volta, ogni altro controllo ha esito negativo. Come faccio a risolvere questo problema? Inoltre, diciamo solo che specificare una directory, come vorrei ottenere i nomi di tutti i file di testo e quanti ce ne sono?

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;
}
È stato utile?

Soluzione

Questo perché i bit di errore nell'oggetto 'infile' sono stati impostati.
È necessario reimpostare i bit di errore prima di fare qualsiasi altra cosa.

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

Altri suggerimenti

chiaro per ripristinare lo stato prima della chiamata per aprire.

Non si ha realmente bisogno di fare uso delle bandiere di errore, ecc, si può chiamare la funzione inFile.is_open () per il controllo. Non sarà necessario utilizzare inFile.clear () sia.

Si fare una chiara

Se l'utente fornisce una directory che devi fare FindFirst e FindNext

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

e il processo di tutti i file in questo modo.

Cancella esso. Inoltre, non è necessario il break nel vostro ciclo, io suggerirei questo, invece:

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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top