2016-05-04 12 views
0

(解決方法)(私はそれを閉じる方法がわかりません)私はソースファイルにある.datファイルを開くためにユーザー入力を受け入れようとしていますが、ファイルのオープンに失敗します。私はすでに構文やその他のことをチェックしてきましたが、解決策を見つけることができません。これは私があなたの問題はinputFileがそう直接場合にこれを入れて、スタック上に定義されたオブジェクトであるということだと思いユーザー入力ファイル名を開くファイル

do 
{ 
    ifstream inputFile("num.txt"); 
    opened = true; 
    if (!inputFile.is_open()) 
    { 
     cout << "The file \"" << fileName << "\" failed to open.\n" 
      << "Check to see if the file exists and please try again" 
      << endl << endl; 
     opened = false; 
    } 
    inputFile.close(); 
} while (!opened); 
+1

ファイルはどこにあるはずですか?たとえば、ユーザーがfoo.txtを入力した場合、foo.txtファイルはプロセスの作業ディレクトリが –

+0

である必要があります。@ Jerry Jerehmiah明らかに、ファイルをソースコードフォルダにドラッグするのではなく、実際のソースコードフォルダに移動する必要がありました。マイクロソフトビジュアルスタジオで。私は答えとしてあなたのものを選択しましたが、それはうまくいかなかったというコメント –

答えて

0

を失敗したので

#include <iostream> 
#include <string> 
#include <fstream> 
#include "arrayFunctions.h" 

using namespace std; 

int main() 
{ 
    string fileName; 
    int size = 0; 
    ifstream inputFile; 
    do 
    { 
     cout << "Please enter file name: "; 
     getline(cin,fileName); 

     inputFile.open(fileName.c_str()); 
     if (!inputFile) 
     { 
     cout << "The file \"" << fileName << "\" failed to open.\n" 
       << "Check to see if the file exists and please try again" 
       << endl << endl; 
     } 
     while (inputFile.good()) 
     { 
      string stop = " "; 
      string num; 
      getline(inputFile, stop); 
      size++; 
     } 
    } while (!inputFile); 

    cout << size << endl << endl; 
    inputFile.close(); 

    system("pause"); 
} 

問題は、実際にファイルを開くことにあるようですステートメントは、おそらくあなたが行っていると思っていることをしていない - それは常にオブジェクトへの参照になるだろうし、nullになることはありません。

ifstreamを暗黙的にブール値に変換すると何が起こるかわかりません。

if (!inputFile.is_open()) 

にこの

if (!inputFile) 

を変更してみてください私は、具体的 good()メソッドが何をするか、ストリームの参照にブラッシュアップしました。効果的には、何がうまくいかないのかを推測するには広すぎます。ハードディスクエラー、権限エラー、間違ったファイル名などが考えられます。

あなたは何が起こっているのかをより明確に把握できます。エラーメッセージは次のようなものを使用しています(C++リファレンスから修正):

if (!inputFile.good()) { 
    cout << "The file \"" << fileName << "\" failed to open.\n" 
    cout << "good()=" << inputFile.good(); 
    cout << " eof()=" << inputFile.eof(); 
    cout << " fail()=" << inputFile.fail(); 
    cout << " bad()=" << inputFile.bad(); 
} 
+0

です。しかしifstreamは良い結果と失敗した機能を提供し、同じ結果を試しました。ファイルが開かないようです –

+0

@Darr Brettソリューションエクスプローラのソースコードフォルダにドラッグしたときにファイルをそのディレクトリに移動していないため、私のミスはVisual Studioによって発生していました。ファイルエクスプローラ自体でファイルを移動する必要がありました。それに関係なく、知っておくと便利です/私はエラーでそれを行うことができます –

関連する問題