名前空間
変種
操作

std::fsetpos

From cppreference.com
< cpp‎ | io‎ | c
 
 
 
C形式I/O
型とオブジェクト
関数
ファイルアクセス
直接入出力
非書式化入出力
書式付き入力
(C++11)(C++11)(C++11)    
(C++11)(C++11)(C++11)    
書式付き出力
ファイルポジショニング
fsetpos
エラーハンドリング
ファイル操作
 
ヘッダ<cstdio>で定義
int fsetpos( std::FILE* stream, const std::fpos_t* pos );

指定されたストリームstreamのファイル位置指示子とマルチバイト解析状態(もしあれば)を、posが指す値に従って設定します。

新しい解析状態と位置を設定することに加えて、この関数を呼び出すと、std::ungetcの効果が取り消され、設定されている場合はファイル終端状態がクリアされます。

読み取りまたは書き込みエラーが発生した場合、ストリームのエラー指示子(std::ferror)が設定されます。

目次

[編集] パラメータ

stream - 変更するファイルストリーム
pos - 同じファイルに関連付けられたストリームに対して呼び出されたstd::fgetposから取得されたfpos_tオブジェクトへのポインタ

[編集] 戻り値

成功した場合は​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
English 日本語 中文(简体) 中文(繁體)