質問

彼らは有効なファイル名を最初に入力した場合は、

私は、ファイル名をユーザに促すよ、それが動作します。その最初の時間を無効場合は、他のすべてのチェックが失敗します。私はこれをどのように解決するのでしょうか?また、のは、私はすべてのテキストファイルの名前を取得する方法を、彼らは単にディレクトリを指定しましょう、そこにどのように多くの?

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;
}
役に立ちましたか?

解決

オブジェクトのINFILE '内のエラービットが設定されているので、

このです。
あなたが何かを行う前に、エラービットをリセットする必要があります。

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

他のヒント

開くための呼び出し前の状態をリセットするために明確に呼び出します。

あなたは本当にあなただけのチェックのためinFile.is_open()関数を呼び出すことができ、などのエラーフラグを使用する必要はありません。あなたはinFile.clear()のいずれかを使用する必要はありません。

はい行う明確な

は、ユーザーがあなたがする必要があるディレクトリを提供する場合、FindFirst関数とFindNextメソッド

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

とプロセスすべてがそのようにファイルます。

をクリアそれ。また、あなたはループの中断を必要としない、私の代わりにこれをお勧めます:

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)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top