程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 詳解C說話中fseek函數和ftell函數的應用辦法

詳解C說話中fseek函數和ftell函數的應用辦法

編輯:關於C++

詳解C說話中fseek函數和ftell函數的應用辦法。本站提示廣大學習愛好者:(詳解C說話中fseek函數和ftell函數的應用辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C說話中fseek函數和ftell函數的應用辦法正文


fseek函數:

int fseek(FILE * _File, long _Offset, int _Origin); 

函數設置文件指針stream的地位。假如履行勝利,stream將指向以fromwhere為基准,偏移offset(指針偏移量)個字節的地位,函數前往0。假如履行掉敗則不轉變stream指向的地位,函數前往一個非0值。
超越文件末尾地位,照樣前往0。往回偏移超越首地位,照樣前往0,當心應用。
第一個參數stream為文件指針。
第二個參數offset為偏移量,負數表現正向偏移,正數表現負向偏移。
第三個參數origin設定從文件的哪裡開端偏移,能夠取值為:SEEK_CUR、SEEK_END或SEEK_SET。
SEEK_SET:文件開首
SEEK_CUR:以後地位
SEEK_END:文件開頭
eg:

#include<stdio.h>
#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);
}
 
int 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("\nThe original data:\n\n");
  
 for(j=0;j<N;j++)
 {
  printf("\nNo:%ldName:%-8sScores:",ss[j].sno,ss[j].name);
  for(i=0;i<3;i++)
    printf("%6.2f",ss[j].score[i]);
  printf("\n");
 }
 fun("student.dat",n);
 printf("\nThe data after modifing:\n\n");
 
 fp=fopen("student.dat","rb");
 fread(ss,sizeof(STU),N,fp);
 fclose(fp);
 
 for(j=0;j<N;j++)
 {
  printf("\nNo:%ldName:%-8sScores:",ss[j].sno,ss[j].name);
  for(i=0;i<3;i++)
    printf("%6.2f",ss[j].score[i]);
  printf("\n");
 }
 return 0;
}

ftell函數
ftell函數用於獲得文件地位指針以後地位絕對與文件首的偏移字節數。在隨機方法存取文件時,因為文件地位頻仍的前後挪動,法式不輕易肯定文件確當前地位。

long len = ftell(fp) 

eg1:

#include <stdio.h>
int main( void )
{
 FILE *stream;
 stream = fopen( "MYFILE.TXT", "w+" );
 fprintf( stream, "This is a test" );
 printf( "The file pointer is at byte \
%ld\n", ftell( stream ) );
 fclose( stream );
 return(0);
}

eg2:
ftell普通用於讀取文件的長度,上面彌補一個例子,讀取文本文件中的內容:

#include <stdio.h>
#include <stdlib.h>
int main()
{
 FILE *fp;
 int flen;
 char *p;
/* 以只讀方法翻開文件 */
 if ( (fp = fopen( "1.txt", "r" ) ) == NULL )
 {
 printf( "\nfile open error\n" );
 exit( 0 );
 }
 fseek( fp, 0L, SEEK_END );       /* 定位到文件末尾 */
 flen = ftell( fp );         /* 獲得文件年夜小 */
 p = (char *) malloc( flen + 1 ); /* 依據文件年夜小靜態分派內存空間 */
 if ( p == NULL )
 {
 fclose( fp );
 return(0);
 }
 fseek( fp, 0L, SEEK_SET );       /* 定位到文件開首 */
 fread( p, flen, 1, fp );        /* 一次性讀取全體文件內容 */
 p[flen] = '\0';             /* 字符串停止標記 */
 printf( "%s", p );
 fclose( fp );
 free( p );
 return(0);
}


法式改良

#include <stdio.h>
main()
{
 FILE *myf;
 long f1; /* 此處將f1設置為long 可以讀取更長的文件 */
 myf = fopen( "1.txt", "rb" );
 fseek( myf, 0, SEEK_END );
 f1 = ftell( myf );
 fclose( myf );
 printf( “ % d \ n ”, f1 );
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved