2011-10-04 192 views
-2

以下是我稱之爲的功能!正如我可以看到它打開文件一次! 但我不明白爲什麼它返回「太多打開的文件」。它與我的矢量大小有關嗎?ostream無法打開文件,因爲打開的文件太多

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

在WriteResult之前,您最有可能打開的文件尚未關閉。 – molbdnilo

回答

-3

嘗試

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

順便說一句,想更換「爲」與「的for_each」 STL方法

+0

沒有按照我的預期工作! – Yasaman

-1

Too many open files與計算機(一個問題有一個每用戶和全球限制一次可以打開多少個文件)可以使用lsof這樣的程序查看當前打開的文件。

嘗試重新啓動機器並再次運行程序。

+0

'太多打開的文件'可能是操作系統限制,但大多數情況下,它是一個程序限制;在某處,該程序正在打開一個文件,並未能將其關閉。 –

+0

但lsof的提示仍然有效。也許OP真的有太多的文件打開(類似於內存泄漏),或者可能是另一個應用程序搞砸了。這很可能會指出罪魁禍首。 – arne

+0

@down投票人:爲什麼? –