2017-03-24 17 views
1

これは私のC++コードなぜ多くのファイルを開くと「ファイルを開くことができませんでしたか?

const int num_of_file = 1024; 
std::ifstream data("data.txt"); 
std::vector<std::ofstream> files(num_of_file); 
for (int i = 0; i < num_of_file; ++i) 
{ 
    files[i].open(std::to_string(i) + ".txt"); 
    if (files[i].is_open() == false) 
    { 
     std::cerr << "open " << std::to_string(i) << ".txt fail" << std::endl; 
     exit(0); 
    } 
} 

ですが、私は、コードを毎回実行すると、「オープンが失敗509.txt」受け取りました。

+3

あなたはどのプラットフォームを使用していますか?私は、多くのプラットフォームで同時にオープンしているファイル記述子の数が厳しく制限されていると考えています。 –

+0

多くのファイルを一度に開く必要がある場合は、問題を解決する最善の方法はありますか? – crashmstr

+0

詳細はこちらhttp://stackoverflow.com/questions/870173/is-there-a-limit-on-number-of-open-files-in-windows –

答えて

1

少しの研究の後で、制限がストリームから生じるようです。 ストリームはC "ストリーム"(fopen、freadなど)の上に構築され、これらの関数は "ファイルハンドル"の共有テーブルのコレクションを使用します。これらのテーブルの最大サイズはVC++ランタイムライブラリに書き込まれます。私はあなたが509ファイルで限界を打っていることに少し驚いています - 近くでは限界は2048ファイルに近いはずです - しかし、私はあなたが打っている限界だと思っています。

内部バッファを保持し、特定の制限に達すると、ファイルを書き込んで閉じます。

関連する問題