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

fread

[funkcja] Wczytuje określoną ilość danych ze wskazanego strumienia.

Składnia

C/C++
#include <cstdio>

size_t fread( void * buffer, size_t size, size_t count, FILE * stream );

Argumenty

ArgumentOpis
void *bufferBufor do którego zostaną zapisane odczytane dane.
size_t sizeRozmiar jednego elementu danych, wyrażony w bajtach.
size_t countMaksymalna liczba elementów, jaka może zostać wczytana.
FILE *streamOkreśla strumień na którym ma zostać wykonana operacja.

Zwracana wartość

Zwraca liczbę poprawnie wczytanych elementów. Zwrócona wartość może być mniejsza niż wartość count jeżeli w trakcie wczytywania danych wystąpił błąd lub został osiągnięty koniec pliku zanim wczytano oczekiwaną liczbę elementów. W celu ustalenia rodzaju błędu jaki wystąpił podczas wczytywania danych należy użyć funkcji » standard Cferror lub » standard Cfeof.

Jeżeli argument size lub count ma wartość 0, to funkcja zwróci wartość 0 oraz zawartość bufora wyjściowego nie ulegnie zmianie.

Opis szczegółowy

Funkcja odczytuje ze strumienia maksymalnie count elementów, gdzie rozmiar każdego elementu wynosi size bajtów.

Dodatkowe informacje

Niniejsza funkcja zapisze do bufora maksymalnie size*count bajtów w przypadku sukcesu.

Położenie kursora odczytu danych strumienia jest nieokreślone w przypadku wystąpienia błędu w trakcie odczytu danych. Ponadto nie można określić liczby odczytanych bajtów dla elementu, który nie został w pełni odczytany.

Pamiętaj, że:
Liczba faktycznie odczytanych bajtów ze strumienia będzie inna dla strumienia otwartego w trybie binarnym oraz w trybie tekstowym, ponieważ para znaków "\r\n" zostanie zastąpiona jednym znakiem "\n" przy odczycie danych w trybie tekstowym.

Przykład

C/C++
#include <cstdio>

bool wyswietlFragmentPliku( const char * _nazwaPliku )
{
    FILE * plik = fopen( _nazwaPliku, "rb" );
    if( !plik )
         return false;
   
    const int LICZBA_ELEMENTOW = 1000;
   
    char bufor[ LICZBA_ELEMENTOW ];
    size_t odczytanychBajtow = fread( bufor, sizeof( char ), LICZBA_ELEMENTOW, plik );
    if( odczytanychBajtow != LICZBA_ELEMENTOW )
         printf( "Odczytano mniej bajtow niz rozmiar bufora.\n" );
   
    printf( "Zawartosc bufora (%d bajtow):", odczytanychBajtow );
    printf( "\n=================\n" );
    printf( "%.*s", odczytanychBajtow, bufor );
    printf( "\n=================\n" );
    fclose( plik );
    return true;
}

int main()
{
    if( !wyswietlFragmentPliku( "main.cpp" ) )
         printf( "Nie udalo sie odczytac pliku.\n" );
   
    return 0;
}
Standardowe wyjście programu:
Odczytano mniej bajtow niz rozmiar bufora.
Zawartosc bufora (740 bajtow):
=================
#include <cstdio>

bool wyswietlFragmentPliku( const char* _nazwaPliku )
{
        FILE* plik = fopen(_nazwaPliku,"rb");
        if(!plik)
                return false;

        const int LICZBA_ELEMENTOW = 1000;

        char bufor[LICZBA_ELEMENTOW];
        size_t odczytanychBajtow = fread (bufor, sizeof( char ), LICZBA_ELEMENTOW, plik);
        if (odczytanychBajtow != LICZBA_ELEMENTOW)
                printf("Odczytano mniej bajtow niz rozmiar bufora.\n.");

        printf("Zawartosc bufora (%d bajtow):",odczytanychBajtow);
        printf("\n=================\n");
        printf("%.*s",odczytanychBajtow, bufor);
        printf("\n=================\n");
        fclose(plik);
        return true;
}

int main()
{
        if(!wyswietlFragmentPliku("main.cpp"))
                printf("Nie udalo sie odczytac pliku.\n");

        return 0;
}
=================

Zagadnienia powiązane

fwriteZapisuje do pliku. (funkcja)
fgetsWczytuje jeden wiersz tekstu ze wskazanego strumienia. (funkcja)
fgetcWczytuje znak ze wskazanego strumienia. (funkcja)

Linki zewnętrzne