2017-01-13 2 views
-1

Ich habe ein Problem beim Lesen von Textdateien aus meinem Verzeichnis.C++ Kann TXT-Datei nicht lesen mit ifstream Segmentierung Fehler Fehler

Hier ist mein Teil des Codebeispiels. (Wenn Sie möchten, kann ich ganz Code laden)

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; 
} 

Lassen Sie mich Ihnen Code Schritt für Schritt sagen:

1. Ich initialisieren mein ifstream Objekt.

ifstream file; 

2. Platz: ich alle meine Textdateien in globLabel0 Objekt gespeichert und globLabel0 wird wie folgt initialisiert:

glob_t globLabel0; 

Dann speichere ich alle Textdateien im Verzeichnis wie folgt:

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

Ich weiß definitiv, dass globLabel0 5923 Textdateien hat, die ich beim Debuggen gesehen habe.

Dann habe ich versuchte erste Textdatei zu öffnen, wie

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

3. folgen: Column Nach der Feststellung. Ich habe mein Dateiobjekt geschlossen.

file.close(); 

4.: Hier ist mein Problem, wenn ich versuche, Datei für Schleife innen zu öffnen

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

Ich habe folgende Fehlermeldung:

enter image description here

Wenn möglich, könnten Sie Bitte sag mir wo ich Fehler gemacht habe?

+0

Sieht aus, als hättest du nicht so viele Mitglieder von 'globLabel0.gl_pathv', wie du denkst. –

+1

Nein, lade nicht den ganzen Code hoch. Laden Sie [mcve] hoch. –

+0

@ JonathanMee "Sie haben nicht so viele Mitglieder von globLabel0.gl_pathv" Wenn Sie meinen, ob mein globLabel0 Objekt leer ist, habe ich 5923 Textdateien. Hier können Sie von Link sehen: https://www.mediafire.com/?d883fgma1r4xp8x –

Antwort

0

Sie den gleichen Eingangsstrom verwenden diese mehrere Dateien zu öffnen, bewirkt, dass nur die erste Datei korrekt geöffnet werden, so dass Sie innerhalb Schleife schließen, nachdem eine Datei geöffnet wird, dann wird die nächste öffnen und so weiter:

// 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

Danke für die Antwort, aber ich weiß nicht warum, aber file.clear(); ist nicht verfügbar. Ich meine clear() -Methode wird nicht aufgeführt, wenn ich STRG + Leerzeichen mache. Außerdem habe ich file.close() ausprobiert, aber ich habe denselben Segmentierungsfehlerfehler :( –

+1

Wenn Sie keinen wirklich alten Compiler haben, wird ['open()' auch 'clear()'] aufrufen (http: //www.open- std.org/jtc1/sc22/wg21/docs/lwg-defects.html#409) –

+1

so ist die Alternative, ein Array von 'ifstream' Objekten so viel wie die Anzahl der Dateien zu erstellen und jedes von ihnen zu verwenden, um die Dateien zu öffnen und sehen, ob es das Problem löst, wenn es funktioniert, dann versuche einen ähnlichen Weg zu finden wie "ifstream :: clear" – Raindrop7