-2

以下は、私が一度呼び出す関数です!ご覧のとおり、ファイルを1回開きます。しかし、「開いているファイルが多すぎます」と返される理由がわかりません。ベクトルのサイズに関連するものはありますか?

void WriteResult(std::vector<result*> result)
{
    std::string tempStr = "";
    std::string outPath = "/my/path/similarityScores.txt" ;
    for ( int i=0; i< result.size(); i++)
        tempStr += (*result[i]).GetResult();
    outStream.open(outPath.c_str(), std::ios::app );
    if (!outStream)
        std::cout << std::strerror(errno) << '\n';  
    outStream << tempStr;
    outStream.close();
}
4

2 に答える 2

0

Too many open filesはコンピュータの問題です(ユーザーごとに、一度に開くことができるファイルの数にはグローバルな制限があります)lsof。たとえば、現在開いているファイルを確認するようなプログラムを使用できます。

マシンを再起動して、プログラムを再実行してください。

于 2011-10-04T07:03:33.870 に答える
-3

試す

for ( int i=0; i< result.size(); i++)
**{**tempStr += (*result[i]).GetResult();**}**
outStream.open(outPath.c_str(), std::ios::app );

ところで、「for」を「for_each」stlメソッドに置き換えることを考えてください

于 2011-10-04T06:49:06.523 に答える