2013-12-22 5 views
0

Я редактирую существующий код на C++, чтобы он открывал несколько файлов с помощью stringsteam. У меня есть цикл с целым числом от 1 до 7, и есть 7 файлов, которые мне нужно открыть. Файлы называются PMAP1.txt ... PMAP7.txt. Я пытаюсь открыть его таким образом:C++: Не удается открыть файлы со строковой обработкой

  ifstream precipfile; 
      int j = 0; 
      stringstream ss; 
      string FileName; 

      for(j=1;j<6;j++){ 

       ss <<"PMap" << j <<".txt" << endl; 
       FileName = ss.str(); 
       precipfile.open(FileName.c_str(),ios::in); 

       if(!precipfile.good()) 
        ReportFatalError("Unable to find or open precipfile"); 
      } 

Это не работает для некоторых возвращается reason.It «Невозможно найти или открыть precipfile». Но если я открыть один файл, используя только одно имя файла непосредственно его works.Like:

    string FileName = ("PMap.txt"); 
        precipfile.open(FileName.c_str()); 

Это works.Please помощь!

+1

Печать 'ss.str()' каждый раз. – chris

ответ

4

Внутри вашего цикла вы не Переустановка stringstream объекта

ss <<"PMap" << j <<".txt" << endl; 

, таким образом, вы продолжаете добавляя материал к stringstream без удаления добавил предыдущий материал. Замените вышеприведенную строку в вашем цикле следующими двумя строками, чтобы правильно очистить stringstream на каждой итерации.

ss.str(""); 
ss <<"PMap" << j <<".txt" << endl; 

Вот почему код работает только один раз - в первый раз поток очищается, но последующие итерации он содержит все символы, которые вы добавили в предыдущей итерации.

+0

Спасибо .. Я попробую это – Ravin

+0

@ Ravin Это сработало? – mathematician1975

+0

еще не знаю .. кажется, есть еще одна проблема где-то в другом месте, поэтому я не могу запустить прог еще. Постараюсь, как только смогу запустить его. Спасибо. – Ravin

1

Ваша петля слишком мала - измените ее на for (j = 1; j <= 7; j++).