std::fsetpos
| Definiert in Header <cstdio> |
||
| int fsetpos( std::FILE* stream, const std::fpos_t* pos ); |
||
Setzt den Dateipositionsindikator und den Multibyte-Analysezustand (falls vorhanden) für den C-Dateistream stream gemäß dem von pos dargestellten Wert.
Neben der Festlegung des neuen Analysezustands und der Position macht ein Aufruf dieser Funktion die Auswirkungen von std::ungetc rückgängig und löscht den End-of-File-Status, falls dieser gesetzt ist.
Wenn ein Lese- oder Schreibfehler auftritt, wird der Fehlerindikator (std::ferror) für den Stream gesetzt.
Inhalt |
[edit] Parameter
| stream | - | Dateistream, der modifiziert werden soll |
| pos | - | Zeiger auf ein fpos_t Objekt, das von std::fgetpos erhalten wurde, aufgerufen auf einem Stream, der mit derselben Datei verknüpft ist. |
[edit] Rückgabewert
0 bei Erfolg, ein Wert ungleich Null bei einem Fehler. Setzt außerdem errno im Fehlerfall.
[edit] Hinweise
Nach dem Springen zu einer Nicht-Ende-Position in einem breiten Stream kann der nächste Aufruf einer beliebigen Ausgabefunktion den Rest der Datei undefiniert machen, z. B. durch die Ausgabe einer Mehrbyte-Sequenz mit anderer Länge.
[edit] Beispiel
#include <cstdio> #include <cstdlib> int main() { // Prepare an array of floating-point values. const int SIZE = 5; double A[SIZE] = {1., 2., 3., 4., 5.}; // Write array to a file. std::FILE * fp = std::fopen("test.bin", "wb"); std::fwrite(A, sizeof(double), SIZE, fp); std::fclose(fp); // Read the values into array B. double B[SIZE]; fp = std::fopen("test.bin", "rb"); std::fpos_t pos; if (std::fgetpos(fp, &pos) != 0) // current position: start of file { std::perror("fgetpos()"); std::fprintf(stderr, "fgetpos() failed in file %s at line # %d\n", __FILE__, __LINE__-3); std::exit(EXIT_FAILURE); } int ret_code = std::fread(B, sizeof(double), 1, fp); // read one value // current position: after reading one value std::printf("%.1f; read count = %d\n", B[0], ret_code); // print one value and ret_code if (std::fsetpos(fp, &pos) != 0) // reset current position to start of file { if (std::ferror(fp)) { std::perror("fsetpos()"); std::fprintf(stderr, "fsetpos() failed in file %s at line # %d\n", __FILE__, __LINE__-5); std::exit(EXIT_FAILURE); } } ret_code = std::fread(B, sizeof(double), 1, fp); // re-read first value std::printf("%.1f; read count = %d\n", B[0], ret_code); // print one value and ret_code std::fclose(fp); return EXIT_SUCCESS; }
Ausgabe
1.0; read count = 1 1.0; read count = 1
[edit] Siehe auch
| holt den Dateipositionierungsindikator (function) | |
| gibt den aktuellen Dateipositionierungsindikator zurück (function) | |
| verschiebt den Dateipositionierungsindikator an eine bestimmte Stelle in einer Datei (function) | |
| C-Dokumentation für fsetpos
| |