2017-01-13 13 views
-1

У меня проблема с чтением текстовых файлов из моего каталога.C++ Не удается прочитать txt-файл с ifstream Ошибка сегментации Ошибка

Вот моя часть кода. (Если вы хотите, я могу загрузить весь код)

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 текстовых файла, которые я видел во время отладки.

Затем я попытался открыть 1-ый текстовый файл, как следовать

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

3-й: После нахождения ColumnSize. Я закрыл файл.

file.close(); 

четвёртых: Вот моя проблема, когда я пытаюсь открыть файл в цикл

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

У меня есть следующее сообщение об ошибке:

enter image description here

Если возможно, вы скажите, пожалуйста, где я ошибся?

+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(); недоступно. Я имею в виду, что метод clear() не указан, когда я создаю ctrl + space. Кроме того, я попробовал file.close(), но у меня такая ошибка сегментации :( –

+1

Если у вас действительно древний компилятор, '' open() 'также будет вызывать' clear() '] (http: //www.open- std.org/jtc1/sc22/wg21/docs/lwg-defects.html#409) –

+1

, так что альтернативой является создание массива объектов 'ifstream' столько же, сколько количество файлов и использование каждого из них для открытия файлов и посмотрим, разрешит ли он проблему. Если она работает, попробуйте найти аналогичный способ 'ifstream :: clear' – Raindrop7

 Смежные вопросы

  • Нет связанных вопросов^_^