C言語の巻き戻し()関数は:ファイルの先頭にファイルポインタをリセットします

ヘッダファイルます。#include <stdio.hに>

巻き戻し()関数は、ファイルを指すファイル・ポインタの開始時に使用され、次のようにプロトタイプであるfseek関数(ストリーム、0、SEEK_SET)を呼び出すことに相当EOFとの誤差を、関連するファイルストリームをクリアしています。

空巻き戻し(ファイル*ストリーム);

パラメータストリームは、ファイルポインタを開くことです。

注:正確な、このポインタファイルポインタストリームではなく、ファイル内のポインタの位置、ファイルの読み取りおよび書き込みポインタをドキュメントの位置として(現在のリードを指すとバイトを書き込む)後退します。ファイルポインタが再割り当ては変更されませんされていない場合、ファイルポインタは、ファイル全体へのポインタです。

チャー*の_nextcを含む読み書き位置ポインタでFILE *ストリームファイルポインタは、ファイルの次の書き込み場所を指します。次の構造:

typedef struct
{
    int _fd;  // 文件号
    int _cleft;  // 缓冲区中剩下的字节数
    int _mode;  // 文件操作模式
    char * _nextc;  // 下一个字节的位置
    char * _buff;  // 文件缓冲区位置
}FILE;

たび次の読み込みに追記、このポインタがポイントに自動的に位置。ファイルだけで開くまたは作成すると、ファイルの先頭へのポインタ。()関数によってftellは現在の位置ポインタを得ることができ、位置ポインタは、巻き戻し()/のfseek()関数によって変更され得る、リーダーは場所を指す必要があります。

[]戻って最初にファイルを再度読み取りを読み込むためのデータの例。

#include<iostream.h>
#include<stdio.h>
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!\n");
    }
    else/*成功则输出信息*/
    {
        fprintf(stream,"%s %ld %f %c","a_string",6500,3.1415,'x');
        fseek(stream,0L,SEEK_SET);            /*定位文件读写指针*/
        fscanf(stream,"%s",s);
        printf("%ld\n",ftell(stream));
        fscanf(stream,"%ld",&l);
        printf("%ld\n",ftell(stream));
        fscanf(stream,"%f",&fp);
        printf("%ld\n",ftell(stream));
        fscanf(stream," %c",&c);
        printf("%ld\n",ftell(stream));
        rewind(stream);/*指向文件开头*/
        fscanf(stream,"%s",s);
        printf("%s\n",s);
        fclose(stream);/*关闭流*/
    }
}
运行结果:
8
13
22
24
a_string

このプログラムは、いくつかのデータを書き込むファイルを作成し、ファイルの先頭を再配置するために、ファイルの読み取り/書き込みポインタを巻き戻し機能を使用し、データを読み取るために、ファイル一つ一つの先頭にファイルポインタを見つけfeeek機能を使用し、読み取りが完了した後に再び読み取るためにそれは読書が文字a_stringの始まりであることがわかりました。

別の例として、ファイルの内容が画面に表示され、同時に別の文書にコピー。

#include "stdio.h"
void main()
{
    FILE *fp1, *fp2;
    fp1 = fopen("file1.c", "r");  // 源文件
    fp2 = fopen("file2.c", "w");  // 复制到file2.c
    while(!feof(fp1)) putchar(fgetc(fp1));  // 显示到屏幕上
    rewind(fp1);   // fp回到开始位置
    while(!feof(fp1)) fputc(fgetc(fp1), fp2);
    fclose(fp1);
    fclose(fp2);
}

おすすめ

転載: blog.csdn.net/u013693952/article/details/93460908