Я редактирую существующий C++ код, так что он открывает несколько файлов с помощью stringsteam. У меня есть цикл с целым числом от 1 до 7, и есть 7 файлов, которые мне нужно открыть. Файлы называются PMAP1.txt... PMAP7.txt. Я пытаюсь открыть его так:
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" );
}
По какой-то причине это не работает. Он возвращает "Невозможно найти или открыть файл". Но если я открою один файл, просто используя одно имя файла напрямую, оно работает. Как:
string FileName = ( "PMap.txt" );
precipfile.open(FileName.c_str());
Это работает. Пожалуйста, помогите!
Внутри цикла вы не stringstream
объект stringstream
ss <<"PMap" << j <<".txt" << endl;
таким образом, вы сохраняете добавочный материал в stringstream, не удаляя предыдущий материал. Замените вышеприведенную строку в вашем цикле следующими двумя строками, чтобы правильно очистить stringstream
на каждой итерации.
ss.str("");
ss <<"PMap" << j <<".txt" << endl;
Вот почему код работает только один раз - при первом очищении потока, но в последующих итерациях он содержит все символы, которые вы добавили при предыдущих итерациях.
Ваша петля слишком мала - измените ее for (j = 1; j <= 7; j++)
.
ss.str()
каждый раз.