std:: fread
|
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) |
|
|
C-Dokumentation
für
fread
|
|