Namespaces
Variants

std:: fread

From cppreference.net
< cpp ‎ | io ‎ | c
Definiert in Header <cstdio>
std:: size_t fread ( void * buffer, std:: size_t size, std:: size_t count, std:: FILE * stream ) ;

Liest bis zu count Objekten in das Array buffer aus dem gegebenen Eingabestrom stream , als ob std::fgetc size Mal für jedes Objekt aufgerufen würde, und speichert die Ergebnisse in der erhaltenen Reihenfolge in den aufeinanderfolgenden Positionen von buffer , der als ein Array von unsigned char reinterpretiert wird. Die Dateipositionsanzeige für den Strom wird um die Anzahl der gelesenen Zeichen vorgerückt.

Wenn die Objekte nicht TriviallyCopyable sind, ist das Verhalten undefiniert.

Wenn ein Fehler auftritt, ist der resultierende Wert des Dateipositionsindikators für den Stream unbestimmt. Wenn ein teilweises Element gelesen wird, ist sein Wert unbestimmt.

Inhaltsverzeichnis

Parameter

buffer - Zeiger auf das erste Objekt im zu lesenden Array
size - Größe jedes Objekts in Bytes
count - Anzahl der zu lesenden Objekte
stream - Eingabedateistream zum Lesen

Rückgabewert

Anzahl der erfolgreich gelesenen Objekte, was weniger sein kann als count falls ein Fehler oder Dateiende-Bedingung auftritt.

Wenn size oder count null ist, gibt fread null zurück und führt keine weitere Aktion aus.

fread unterscheidet nicht zwischen Dateiende und Fehler, und Aufrufer müssen std::feof und std::ferror verwenden, um zu bestimmen, was aufgetreten ist.

Beispiel

#include <cstddef>
#include <cstdio>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <vector>
int main()
{
    // Datei vorbereiten
    std::ofstream("test.txt") << 1 << ' ' << 2 << '\n';
    std::FILE* f = std::fopen("test.txt", "r");
    std::vector<char> buf(4); // char ist trivial kopierbar
    const std::size_t n = std::fread(&buf[0], sizeof buf[0], buf.size(), f);
    std::cout << "Gelesen " << n << " Objekt" << (n > 1 ? "e" : "") << ": "
              << 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 ist nicht trivial kopierbar
//  Dies würde zu undefiniertem Verhalten führen:
//  std::fread(&buf2[0], sizeof buf2[0], buf2.size(), f);
}

Mögliche Ausgabe:

Gelesen 4 Objekte: 0x31 0x20 0x32 0x0A

Siehe auch

formatierten Eingang von stdin , einem Dateistrom oder einem Puffer lesen
(Funktion)
eine Zeichenkette von einem Dateistrom lesen
(Funktion)
in eine Datei schreiben
(Funktion)