2017-01-13 6 views
-1

私のディレクトリからテキストファイルを読み取る際に問題があります。C++ ifstreamでtxtファイルを読み取ることができないセグメンテーションフォルトエラー

ここは私のコードサンプルの一部です。 (あなたは私が全体のコードをアップロードすることができますしたい場合)

ifstream file; 

// Get Total Number of Lines from a sample text file 
file.open(globLabel0.gl_pathv[0]); 
for (int i = 0; getline(file, line); ++i) 
    columnSize++; 
if(file.is_open()) 
    file.close(); 

float trainingData[trainingDataRowSize][columnSize]; 
float testData[testDataRowSize][columnSize]; 

// Define Counters for Loading Samples 
int columnCount=0; 
int rowCount=0; 
int histVal=0; 

// Load Label0 Samples to Training Data 
for(unsigned int i=0;i<globLabel0.gl_pathc;i++){ 
    file.open(globLabel0.gl_pathv[i]); 
    while(file >> histVal){ 
     trainingData[i][columnCount]=(histVal); 
     columnCount++; 
    } 
    file.close(); 
    rowCount=i; 
    columnCount=0; 
} 

私はステップであなたのコードのステップを教えてみましょう:

第一:私は私はifstreamオブジェクトを初期化します。

ifstream file; 

第二:私はglobLabel0オブジェクト内のすべての私のテキストファイルを保存し、globLabel0は次のように初期化されます。

glob_t globLabel0; 

その後、私は次のようにディレクトリ内のすべてのテキストファイルを格納します。

glob(trainLabel0.c_str(),GLOB_TILDE,NULL,&globLabel0); 

私はglobLabel0が5923のテキストファイルを持っていることを間違いなく知っています。

は、その後、私は従う

file.open(globLabel0.gl_pathv[0]); 

第三として、第一のテキストファイルを開こうとしました:ColumnSizeがを見つけた後。私はファイルオブジェクトを閉じた。

第四
file.close(); 

:、

enter image description here

可能な場合、あなたはできます:ここで私は

for(unsigned int i=0;i<globLabel0.gl_pathc;i++){ 
     file.open(globLabel0.gl_pathv[i]); // Problem Here 

forループ内でファイルを開こうとすると、私は次のエラーを持って、私の問題です私が間違っていた場所を教えてください。

+0

あなたが持っていると思うほど多くのglobLabel0.gl_pathvのメンバーがいないようです。 –

+1

いいえ、コード全体をアップロードしないでください。 [mcve]をアップロードします。 –

+0

@ JonathanMee "globLabel0.gl_pathvのメンバーがあまりありません" globLabel0オブジェクトが空であるかどうかを確認するには、5923個のテキストファイルがあります。ここからリンクから見ることができます:https://www.mediafire.com/?d883fgma1r4xp8x –

答えて

0

あなたがこのファイルを開いた後、あなたがループ近い内で、次のいずれかを開いて、その上でできるように、正確にオープンする最初のファイルのみ発生し、複数のファイルを開くには、同じ入力ストリームを使用している:

// after any read of a file if you want to open another file then clse the file to save and clear its buffer then open the next... 

file.close(); 
file.clear(); 

for(unsigned int i=0;i<globLabel0.gl_pathc;i++){ 
    file.open(globLabel0.gl_pathv[i]); 

    // read data to an array or vector or list... 
    while(file >> histVal){ 
     trainingData[i][columnCount]=(histVal); 
     columnCount++; 

    file.close(); 
    file.clear(); // it is also important 
} 
+0

答えをありがとう、しかし、私は理由がわからないが、file.clear();利用できません。私は、Ctrl +スペースを作成するとclear()メソッドがリストにないことを意味します。私はfile.close()を試したのですが、同じセグメンテーションフォールトエラーがあります:( –

+1

本当に古代のコンパイラがない限り、[open() std.org/jtc1/sc22/wg21/docs/lwg-defects.html#409) –

+1

です。その代わりに、ファイルの数だけ 'ifstream'オブジェクトの配列を作成し、それらを使ってファイルを開くこともできますそれが問題を解決するかどうか確認してください。それがうまくいくなら、ifstream :: clearと似た方法を見つけてみてください – Raindrop7

関連する問題