计算流文件长度和加载流文件

(1)fseek函数是用来设定文件的当前读写位置。函数原型: int fseek(FILE *fp,long offset,int origin);函数功能:把fp的文件读写位置指针移到指定的位置,origin是起始点,值包括0(起始位置SEEK_SET),1(当前位置SEEK_CUR),2(结尾位置SEEK_END)。offset是相对于起始位置的偏移量,正值是往后,负值是往前。fseek(fp,20,SEEK_SET); 意思是把fp文件读写位置指针从文件开始后移20个字节。

(2)ftell函数是用来获取文件的当前读写位置。函数原型: long ftell(FILE *fp);函数功能:得到流式文件的当前读写位置,其返回值是当前读写位置偏离文件头部的字节数。

(3)feof函数是判断是否到达文件尾部。函数原型:int feof(FILE *stream);返回值1表示是文件名末尾。

(4)实例

打开流文件

FILE *stream;流文件指针

void OpenImageFile(char *filename)
{
       U32 fileEnd,fileStart;

       U32 imageSize;
       stream = fopen(filename,"rb");
       if(stream==NULL)
      {
             printf("/nERROR:can't find the file./n");
             exit(0);
       }

       fseek(stream,0L,SEEK_END);
       fileEnd=ftell(stream);
       fseek(stream,0L,SEEK_SET);
       fileStart=ftell(stream);

       imageSize=fileEnd-fileStart;  /* fileend == peof+1 */
}

有时在程序运行时,需要将流文件加载到内存中,采用以下函数。

int LoadImageFile(U8 *buf,int size)  //buf为内存分配缓冲区地址,size为缓冲区长度
{
       int i,readSize=size;
       for(i=0;i<size;i++)
      {
            if(feof(stream))    //是否到文件结尾
            {
                  readSize=i;
                  for(;i<size;i++)buf[i]=0;  //未满的补0
                  break;
             }
             buf[i] = fgetc(stream);  //将文件内容字符依次拷贝到内存
       }
       return readSize;
}

 

你可能感兴趣的:(Stream,File,null,FP)