C++:无法使用字符串流操作打开文件

C++: Cannot open files with stringstream operation

本文关键字:操作 文件 字符串 C++      更新时间:2023-10-16

我正在编辑现有的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对象

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

因此,您可以继续将内容附加到字符串流中,而不会删除先前添加的内容。将循环中的上述行替换为以下 2 行,以便在每次迭代时正确清除stringstream

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

这就是为什么代码只工作一次 - 第一次清除流,但后续迭代它包含您在先前迭代中添加的所有字符。

您的循环太小 - 将其更改为 for (j = 1; j <= 7; j++)