std:: fsetpos
|
Definiert in Header
<cstdio>
|
||
|
int
fsetpos
(
std::
FILE
*
stream,
const
std::
fpos_t
*
pos
)
;
|
||
Setzt den Dateipositionsindikator und den Multibyte-Parsing-Zustand (falls vorhanden) für den C-Dateistrom
stream
gemäß dem Wert, auf den
pos
zeigt.
Neben der Einrichtung eines neuen Analysezustands und einer neuen Position macht ein Aufruf dieser Funktion die Auswirkungen von std::ungetc rückgängig und löscht den End-of-File-Zustand, falls dieser gesetzt ist.
Wenn ein Lese- oder Schreibfehler auftritt, wird das Fehlerindikator ( std::ferror ) für den Stream gesetzt.
Inhaltsverzeichnis |
Parameter
| stream | - | Dateistrom, der zu modifizieren ist |
| pos | - | Zeiger auf ein fpos_t Objekt, das von std::fgetpos aufgerufen auf einem mit derselben Datei assoziierten Strom erhalten wurde |
Rückgabewert
0 bei Erfolg, andernfalls ein Wert ungleich Null. Setzt außerdem bei Fehlschlag errno .
Hinweise
Nach dem Positionieren an einer Nicht-End-Position in einem breiten Stream kann der nächste Aufruf einer Ausgabefunktion den Rest der Datei undefiniert lassen, z.B. durch Ausgeben einer Multibyte-Sequenz mit einer anderen Länge.
Beispiel
#include <cstdio> #include <cstdlib> int main() { // Bereite ein Array von Gleitkommawerten vor. const int SIZE = 5; double A[SIZE] = {1., 2., 3., 4., 5.}; // Schreibe Array in eine Datei. std::FILE * fp = std::fopen("test.bin", "wb"); std::fwrite(A, sizeof(double), SIZE, fp); std::fclose(fp); // Lese die Werte in Array B ein. double B[SIZE]; fp = std::fopen("test.bin", "rb"); std::fpos_t pos; if (std::fgetpos(fp, &pos) != 0) // aktuelle Position: Dateianfang { std::perror("fgetpos()"); std::fprintf(stderr, "fgetpos() fehlgeschlagen in Datei %s in Zeile # %d\n", __FILE__, __LINE__-3); std::exit(EXIT_FAILURE); } int ret_code = std::fread(B, sizeof(double), 1, fp); // einen Wert lesen // aktuelle Position: nach dem Lesen eines Werts std::printf("%.1f; gelesene Anzahl = %d\n", B[0], ret_code); // einen Wert und ret_code ausgeben if (std::fsetpos(fp, &pos) != 0) // aktuelle Position auf Dateianfang zurücksetzen { if (std::ferror(fp)) { std::perror("fsetpos()"); std::fprintf(stderr, "fsetpos() fehlgeschlagen in Datei %s in Zeile # %d\n", __FILE__, __LINE__-5); std::exit(EXIT_FAILURE); } } ret_code = std::fread(B, sizeof(double), 1, fp); // ersten Wert erneut lesen std::printf("%.1f; gelesene Anzahl = %d\n", B[0], ret_code); // einen Wert und ret_code ausgeben std::fclose(fp); return EXIT_SUCCESS; }
Ausgabe:
1.0; read count = 1 1.0; read count = 1
Siehe auch
|
ruft die Dateipositionsanzeige ab
(Funktion) |
|
|
gibt die aktuelle Dateipositionsanzeige zurück
(Funktion) |
|
|
bewegt die Dateipositionsanzeige zu einer bestimmten Position in einer Datei
(Funktion) |
|
|
C-Dokumentation
für
fsetpos
|
|