ファイルのfseek関数を使用してファイルポインタを操作する方法

3168 ワード

C言語fseek()関数:ファイルの読み書きポインタを指定した場所に移動
次のセクション>
共有先:
QQ空間
新浪微博
テンセント
豆の花びら
人人網
C言語補習班、有志青年を助ける!全行程は1対1で、永久に勉強して、QQはオンラインで、いつでも応答します!
【C++補習クラス】一対一で補習し、速く勉強し、50日しかかかりません.C++開発をして、頼りになる仕事を見つけます.
ヘッダファイル:#include
fseek()関数は、ファイルの読み書きポインタを指定された場所、すなわち、現在のファイルの位置ポインタを移動することができ、そのプロトタイプは次のとおりです.
    int fseek(FILE * stream, long offset, int fromwhere);
【パラメータ】streamはファイルポインタ、offsetはオフセット量、fromwhereはポインタの開始位置です.
パラメータoffsetは、パラメータfromwhereに基づいて読み書き位置を移動するシフト数である.パラメータfromwhereは、次のいずれかです.
  • SEEK_SET:ファイルの先頭からoffsetシフト量が新しい読み書き位置になる;
  • SEEK_CUR:現在の読み書き位置より後にoffset個の変位量を増加する;
  • SEEK_END:ファイルの末尾に読み書き位置を指定してoffset個のシフト量を増やします.

  • fromwhereがSEEK_の場合CURまたはSEEK_ENDの場合、パラメータoffsetは負の値の出現を許可します.
    バイナリで開いたファイルストリームの場合、移動後の位置はfromwhere+offsetです.
    テキストで開くファイルストリームの場合、offsetは0またはftell()関数の戻り値でなければなりません.fromwhereはSEEK_でなければなりません.SET.
    fseek()関数は一般的にバイナリファイルにもテキストファイルにも使用できます.テキストファイルの操作に使用する場合は、U ltraEditのような一般的なブラウズツールでは、0 x 0 Dと0 x 0 Aの2文字とみなされますが、実際のファイルの読み書きと位置決めは1文字0 x 0 Aで処理されるため、このような質問に遭遇した場合は、ファイル全体をメモリに読み込み、メモリに0 x 0 Dを手動で挿入する方法を考えることができます.これにより、より良い処理効果を達成することができる.
    パラメータが他の値の場合、結果は特定のプラットフォームおよびライブラリ実装によって決まります.
    [戻り値]0が正常に返されます.そうしないと、0以外の値が返されます.読み書きエラーが発生した場合、設定ファイルエラーIDが設定されます.
    注意:筆者のテストでは、ファイルの末尾の位置を超えたか、0を返します.オフセットが最初の位置を超えて-1を返し、-1の位置を指します.注意して使用してください.
    関数の実行に成功すると、ファイル終了フラグが設定され、関数ungetc()のすべての影響が除去されます.
    fseek()関数はlseek()関数と似ていますが、lseek()はoff_を返します.t値、fseek()は整数を返します.また、fseek()はlseek()とは異なり、現在の読み書き位置を取得するにはftell()を使用する必要があります.
    追加の方法(a+)でファイルを開くと、fseek()は読み取りと書き込みの切り替えを許可します.
    2つの例を挙げます.
  • 読み書き位置をファイルの先頭に移動する:fseek(fp,0,SEEK_SET);
  • 読み書き位置をファイルの末尾に移動した場合:fseek(fp,0,SEEK_END);
  • ファイルの先頭から100バイト離れた場所に読み書き位置を移動する:fseek(fp,100 L,SEEK_SET);
  • ファイルの現在位置から100バイト離れた場所に読み書きポインタを移動する:fseek(fp,100 L,SEEK_CUR);
  • は、読み書きポインタをファイルの最後の100バイトに戻す:fseek(fp,-100 L,SEEK_END);

  • 【例】ファイルを作成し、データを書き込んで読み取り、表示します.
  • #include
  • #include
  • void main(void)
  • {
  • FILE* stream;
  • long l;
  • float fp;
  • char s[81];
  • char c;
  • stream = fopen("fscanf.txt","w+");
  • if(stream==NULL)/ファイルを開くのに失敗した
  • {
  • printf("the file is opeaned error!");
  • }
  • else//出力情報
  • {
  • fprintf(stream,"%s %ld %f %c","a_string",6500,3.1415,'x');//フォーマット
  • fseek(stream,0L,SEEK_SET);//ファイル配置
  • fscanf(stream,"%s",s);
  • fscanf(stream,"%ld",&l);
  • fscanf(stream,"%f",&fp);
  • fscanf(stream,"%c",&c);
  • printf("%s",s);
  • printf("%ld",l);
  • printf("%f",fp);
  • printf("%c",c);
  • fclose(stream);//
  • を閉じる
  • }
  • }

  • 出力結果:
    a_string
    6500
    3.141500
    x
    プログラムはまずファイルを作成し、fprintf()関数を使用してファイルストリームにデータを書き込み、fseek()関数を使用してファイルの現在の読み取り/書き込みポインタをファイルヘッダに位置決めし、fscanf()関数を使用してフォーマットで書き込みデータを1つずつ読み出して表示します.