Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Opracował: Piotr DejaVu Szawdyński
Pomógł: GoldWolf
Język C++

freopen

[funkcja] Zamyka, a następnie otwiera wskazany plik.

Składnia

C/C++
#include <cstdio>

FILE * fopen( const char * path, const char * mode, FILE * stream );

Argumenty

ArgumentOpis
const char *pathNazwa pliku, który ma zostać otworzony.
const char *modeOkreśla tryb dostępu, w jakim wskazany plik ma zostać otworzony. Lista dostępnych trybów znajduje się w dalszej części niniejszego dokumentu.
FILE *streamUchwyt do otwartego strumienia.

Zwracana wartość

Zwraca uchwyt przekazany do funkcji poprzez argument stream w przypadku sukcesu. W przeciwnym wypadku funkcja zwraca wartość NULL.

Opis szczegółowy

Funkcja zamyka strumień danych wskazany za pomocą trzeciego argumentu, a następnie otwiera plik o podanej nazwie w określonym trybie dostępu. Nazwę pliku określa się za pomocą pierwszego argumentu. Drugi argument określa natomiast tryb dostępu do pliku.

Uwaga!
Wartość drugiego i trzeciego argumentu musi być poprawna i jednocześnie różna od NULL. Wartość pierwszego argumentu jest zależna od posiadanej implementacji standardowej biblioteki. Implementacja stosowana w kompilatorach MinGW dopuszcza wartość NULL jako pierwszy argument (co umożliwia zmianę trybu dostępu do pliku), natomiast biblioteki dostarczane wraz z kompilatorem Visual C++ wymagają, aby pierwszy argument był różny od NULL oraz nie był pustym łańcuchem znaków.

Tryby dostępu do pliku

TrybOpis
"r"Otwiera istniejący plik w trybie do odczytu. Wskazany plik musi istnieć.

Możliwe jest odczytywane dowolnego fragmentu pliku.
"r+"Otwiera istniejący plik w trybie do odczytu i zapisu. Wskazany plik musi istnieć.

Możliwe jest odczytywane, dopisywanie jak również modyfikowanie dowolnego fragmentu pliku.
"w"Tworzy nowy plik i ustawia uchwyt w trybie do zapisu. Jeżeli plik o wskazanej nazwie istniał na dysku to jego zawartość ulegnie skasowaniu!

Możliwe jest dopisywanie oraz modyfikowanie dowolnego fragmentu pliku.
"w+"Tworzy nowy plik i ustawia uchwyt w trybie do odczytu jak i zapisu. Jeżeli plik o wskazanej nazwie istniał na dysku to jego zawartość ulegnie skasowaniu!

Możliwe jest odczytywane, dopisywanie jak również modyfikowanie dowolnego fragmentu pliku.
"a"Otwiera istniejący plik w trybie do zapisu. Jeżeli plik nie istnieje to zostanie on utworzony. Wszelkie nowe dane są dopisywane zawsze na końcu pliku. Wywołania funkcji » standard Cfseek, » standard Cfsetpos oraz » standard Crewind w tym trybie są ignorowane.

Możliwe jest dopisywanie danych do pliku.
"a+"Otwiera istniejący plik w trybie do odczytu i zapisu. Jeżeli plik nie istnieje to zostanie on utworzony. Wszelkie nowe dane są dopisywane zawsze na końcu pliku.

Możliwe jest dopisywanie na końcu pliku oraz odczytywane dowolnego fragmentu pliku.

Tryb binarny

Aby otworzyć plik w trybie binarnym, należy dopisać znak "b" w środku lub na końcu łańcucha, który opisuje tryb otwarcia pliku. Dopisanie znaku "b" na początku wspomnianego łańcucha znaków spowoduje, że otwarcie pliku zakończy się zawsze niepowodzeniem.

Tryb tekstowy

Standard C++ nie określa jasno, kiedy plik jest w trybie tekstowym, zatem cecha ta jest zależna od implementacji posiadanych bibliotek. Zazwyczaj plik jest otwierany w trybie tekstowym, gdy w łańcuchu znaków, który określa tryb nie występuje litera "b". W przypadku bibliotek dostarczanych wraz z kompilatorem Visual C++, tryb tekstowy określa się za pomocą litery "t".

Przykład

C/C++
#include <cstdio>

void dopiszZnak( FILE * pStrumien )
{
    printf( "%s\n",( putc( '@', stderr ) == EOF ) ? "Niepowodzenie"
        : "Zapis udany" );
}

int main()
{
    dopiszZnak( stderr );
    freopen( "plik1.txt", "w", stderr );
    dopiszZnak( stderr );
    freopen( "plik2.txt", "w", stderr );
    dopiszZnak( stderr );
    freopen( "nieistniejacy-katalog/zonk.txt", "w", stderr );
    dopiszZnak( stderr );
    fclose( stderr );
    dopiszZnak( stderr );
    return 0;
}
Możliwe standardowe wyjście programu:
@Zapis udany
Zapis udany
Zapis udany
Niepowodzenie
Niepowodzenie

Zagadnienia powiązane

fcloseZamyka strumień danych. (funkcja)
fopenOtwiera wskazany plik. (funkcja)

Linki zewnętrzne