【问题标题】:C++: Cannot open files with stringstream operationC ++:无法使用字符串流操作打开文件
【发布时间】:2013-12-22 15:57:01
【问题描述】:

我正在编辑现有的 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" );
            }

由于某种原因这不起作用。它返回“无法找到或打开 precipfile”。但如果我 直接使用一个文件名打开一个文件就可以了。喜欢:

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

这行得通。请帮忙!

【问题讨论】:

  • 每次打印ss.str()

标签: c++ c++11 file-io stringstream istringstream


【解决方案1】:

在您的循环中,您不会重置 stringstream 对象

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

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

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

这就是代码只工作一次的原因 - 第一次清除流,但随后的迭代它包含您在之前的迭代中添加的所有字符。

【讨论】:

  • 谢谢..我会试试这个
  • 还不知道..似乎其他地方还有另一个问题,所以我还不能运行 prog..我会尽快发布它。谢谢。
  • @mathematician1975..谢谢,确实有效..问题还在于 ifstream 没有每次都被重置。所以我把声明和 stringstream 声明放在循环中,它工作了!跨度>
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 2019-02-26
    • 2017-08-21
    • 2014-12-03
    • 1970-01-01
    相关资源
    最近更新 更多