Namespaces
Variants

std:: fread

From cppreference.net
< cpp ‎ | io ‎ | c
Défini dans l'en-tête <cstdio>
std:: size_t fread ( void * buffer, std:: size_t size, std:: size_t count, std:: FILE * stream ) ;

Lit jusqu'à count objets dans le tableau buffer depuis le flux d'entrée donné stream comme en appelant std::fgetc size fois pour chaque objet, et stocke les résultats, dans l'ordre obtenu, dans les positions successives de buffer , qui est réinterprété comme un tableau de unsigned char . L'indicateur de position du fichier pour le flux est avancé du nombre de caractères lus.

Si les objets ne sont pas TriviallyCopyable , le comportement est indéfini.

Si une erreur se produit, la valeur résultante de l'indicateur de position du fichier pour le flux est indéterminée. Si un élément partiel est lu, sa valeur est indéterminée.

Table des matières

Paramètres

buffer - pointeur vers le premier objet du tableau à lire
size - taille de chaque objet en octets
count - nombre d'objets à lire
stream - flux de fichier en entrée depuis lequel lire

Valeur de retour

Nombre d'objets lus avec succès, qui peut être inférieur à count si une erreur ou une condition de fin de fichier se produit.

Si size ou count est zéro, fread renvoie zéro et n'effectue aucune autre action.

fread ne fait pas de distinction entre fin de fichier et erreur, et les appelants doivent utiliser std::feof et std::ferror pour déterminer ce qui s'est produit.

Exemple

#include <cstddef>
#include <cstdio>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <vector>
int main()
{
    // Préparer le fichier
    std::ofstream("test.txt") << 1 << ' ' << 2 << '\n';
    std::FILE* f = std::fopen("test.txt", "r");
    std::vector<char> buf(4); // char est trivialement copiable
    const std::size_t n = std::fread(&buf[0], sizeof buf[0], buf.size(), f);
    std::cout << "Lu " << n << " objet" << (n > 1 ? "s" : "") << " : "
              << std::hex << std::uppercase << std::setfill('0');
    for (char n : buf)
        std::cout << "0x" << std::setw(2) << static_cast<short>(n) << ' ';
    std::cout << '\n';
    std::vector<std::string> buf2; // string n'est pas trivialement copiable
//  Cela résulterait en un comportement indéfini :
//  std::fread(&buf2[0], sizeof buf2[0], buf2.size(), f);
}

Sortie possible :

Lu 4 objets : 0x31 0x20 0x32 0x0A

Voir aussi

lit une entrée formatée depuis stdin , un flux de fichier ou un tampon
(fonction)
obtient une chaîne de caractères depuis un flux de fichier
(fonction)
écrit dans un fichier
(fonction)