Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

problem z otwraciem >509 plików w jednym momencie

Ostatnio zmodyfikowano 2015-05-27 07:58
Autor Wiadomość
robaczek122
Temat założony przez niniejszego użytkownika
problem z otwraciem >509 plików w jednym momencie
» 2015-05-26 23:44:36
Cześć,


C/C++
#include <iostream>
#include <fstream>
#include <conio.h>
#include <cstdlib>

using namespace std;

ofstream plik2[ 10000 ];
int i = 0;

int main()
{
    for( i = 0; i <= 600; i++ ) {
        char buffer[ 33 ];
        plik2[ i ].open( itoa( i, buffer, 10 ), ofstream::app );
        if( plik2[ i ].is_open() )
        {
            plik2[ i ] << "test";
        }
        else
        {
            cout << "Blad otwarcia dla i = " << i << endl;
        }
    }
   
    for( int j = 0; j <= i - 1; j++ ) {
        plik2[ j ].close();
    }
    getch();
    return( 0 );
}

Tworzone są pliki od 0 do 508, a teoretycznie powinny od 0 do 600.
Kod jest uproszczony, chodzi mi tylko rozwiązanie problemu.

(Ogólnie chciałem pracować nad około 1000 plików i zamiast otwierać (/tworzyć) jakiś dopisywać na końcu kilka znaków zamykać, otwierać inny, zamykać, otwierać poprzedni otworzyć wszystkie na raz i trzymać je otwarte przez cały czas działania programu. 1000 plików po 1 MB, których nazwy (generowane jako stringi) nie są znane w chwili kompilacji.)
P-132832
Monika90
» 2015-05-26 23:56:59
Jaki system operacyjny, jaki kompilator, etc...?

Zgaduję, że Windows i MSVC, w takim razie zobacz to
https://msdn.microsoft.com​/en-us/library​/6e3b887c%28v=vs.140%29.aspx

Ale najlepiej nie otwieraj tylu plików, bo po co?
P-132833
robaczek122
Temat założony przez niniejszego użytkownika
» 2015-05-27 07:58:52
System Windows 7, kompilator CodeBlocks.

Chciałem zrobić możliwie jak najszybszy program, dlatego nie chciałem marnować czasu na otwieranie i zamykanie pliku.
Dostaję dane w pliku txt i muszę z niego wyciągnąć wartości zapisując do różnych plików.

U mnie zadziałało.
Dla przyszłych pokoleń rozwiązanie:
C/C++
// crt_setmaxstdio.c
// The program retrieves the maximum number
// of open files and prints the results
// to the console.

#include <stdio.h>

int main()
{
    printf( "%d\n", _getmaxstdio() );
   
    _setmaxstdio( 2048 );
   
    printf( "%d\n", _getmaxstdio() );
}
P-132836
« 1 »
  Strona 1 z 1