ostream не может открыть файл из-за слишком большого количества открытых файлов - PullRequest
0 голосов
/ 04 октября 2011

Ниже приведена функция, которую я вызываю один раз! Как я вижу, он открывает файл один раз! Но я не могу понять, почему он возвращает «Слишком много открытых файлов». Есть ли что-нибудь, связанное с размером моего вектора?

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();
}

Ответы [ 2 ]

0 голосов
/ 04 октября 2011

Too many open files - проблема с компьютером (для каждого пользователя существует глобальное ограничение на количество файлов, которые можно открывать одновременно), вы можете использовать программу типа lsof, чтобы увидеть, какие файлы открыты в данный момент.

Попробуйте перезагрузить компьютер и снова запустить программу.

0 голосов
/ 04 октября 2011

Попробуйте

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

Кстати, подумайте о замене "for" на метод "for_each" stl

...