std::fsetpos
Объявлено в заголовочном файле <cstdio> | ||
|---|---|---|
int fsetpos( std::FILE* stream, const std::fpos_t* pos ); |
Устанавливает индикатор позиции в файле и состояние разбора многобайтовых символов (если оно есть) для файлового потока C stream в соответствии со значением, на которое указывает pos.
Помимо установки нового состояния разбора и позиции, вызов этой функции отменяет эффекты std::ungetc и сбрасывает состояние конца файла, если оно установлено.
Если возникает ошибка чтения или записи, устанавливается индикатор ошибки (std::ferror) потока.
Параметры
| stream | - | файловый поток для изменения |
| pos | - | указатель на объект fpos_t, полученный вызовом std::fgetpos для потока, связанного с тем же файлом |
Возвращаемое значение
0 в случае успеха, в противном случае — ненулевое значение. При ошибке также устанавливает errno.
Примечания
После перехода к позиции, не являющейся концом широкого потока, следующий вызов любой функции вывода может сделать оставшуюся часть файла неопределённой, например, выведя многобайтовую последовательность другой длины.
Пример
#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;
}
Вывод:
1.0; read count = 1 1.0; read count = 1
См. также
| получает индикатор позиции в файле (функция) |
|
| возвращает текущий индикатор позиции в файле (функция) |
|
| перемещает индикатор позиции в файле в указанное место (функция) |
|
Документация C для fsetpos |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/c/fsetpos