fseek()関数の使い方

2821 ワード

転載は出典を明記してください.https://blog.csdn.net/wl_soft50/article/details/7787521
毎日少しずつ上達します->関数fseek()の使い方
コードを読むとき、昔から使っていたfseek()に出会って、久しぶりに使っていないので、ちょっと見慣れていないので、次回調べるために書きました.
関数機能は、ファイルポインタをファイルの先頭に向ける、ヘッダファイルstdioを含む必要がある.h
fseek関数名:fseek機能:ストリーム上のファイルポインタの再配置使い方:int fseek(FILE*stream,long offset,int fromwhere);説明:関数はファイルポインタstreamの位置を設定します.実行に成功すると、streamはfromwhereを基準にoffsetバイトの位置をシフトします.offsetがファイル自体のサイズを超えるなどの実行に失敗した場合、streamが指す位置は変更されません.戻り値:成功しました.0を返します.そうでなければ、他の値を返します.fseek position the file position pointer for the file referenced by stream to the byte location calculated by offset. プログラム例:
#include   
  long filesize(FILE *stream);  
  int main(void)  
  {  
    FILE *stream;  
    stream = fopen("MYFILE.TXT", "w+");  
    fprintf(stream, "This is a test");  
    printf("Filesize of MYFILE.TXT is %ld bytes
", filesize(stream)); fclose(stream); return 0; } long filesize(FILE *stream) { long curpos, length; curpos = ftell(stream); fseek(stream, 0L, SEEK_END); length = ftell(stream); fseek(stream, curpos, SEEK_SET); return length; }

int fseek( FILE *stream, long offset, int origin ); 1番目のパラメータstreamはファイルポインタ2番目のパラメータoffsetはオフセット量、整数は順方向オフセット、負数は負方向オフセット3番目のパラメータoriginはファイルのどこからオフセットを開始するかを設定し、値はSEEK_CUR、 SEEK_ENDまたはSEEK_SET SEEK_SET:ファイル先頭SEEK_CUR:現在位置SEEK_END:ファイルの最後にSEEK_SET,SEEK_CURとSEEK_END和は0,1,2の順である.簡単に言えば、fseek(fp,100 L,0);fpポインタをファイルの先頭から100バイト離れたところに移動します.fseek(fp,100L,1);fpポインタをファイルの現在位置から100バイト離れた場所に移動する.fseek(fp,100L,2);fpポインタをファイルの最後の100バイトに戻します.(コメントによると、fseek(fp,-100 L,2))の使用例:
#include   
#define N 5  
typedef struct student {  
 long sno;  
 char name[10];  
 float score[3];  
} STU;  
void fun(char *filename, STU n)  
{  
 FILE *fp;  
 fp = fopen(filename, "rb+");  
 fseek(fp, -1L*sizeof(STU),SEEK_END);  
fwrite(&n, sizeof(STU), 1, fp);  
fclose(fp);  
}  
void main()  
{  
  STU t[N]={ {10001,"MaChao", 91, 92, 77}, {10002,"CaoKai", 75, 60, 88},  
  {10003,"LiSi", 85, 70, 78}, {10004,"FangFang", 90, 82, 87},  
  {10005,"ZhangSan", 95, 80, 88}};  
  STU n={10006,"ZhaoSi", 55, 70, 68}, ss[N];  
  int i,j; FILE *fp;  
  fp = fopen("student.dat", "wb");  
  fwrite(t, sizeof(STU), N, fp);  
  fclose(fp);  
  fp = fopen("student.dat", "rb");  
  fread(ss, sizeof(STU), N, fp);  
  fclose(fp);  
  printf("
The original data :

"); for (j=0; j