c文件操作

文件指针定位函数

int fseek( FILE *stream, long offset, int origin );

如果成功返回0,失败返回非0

参数origin可以取值:

    SEEK_CUR 当前位置

    SEEK_END 文件未尾

    SEEK_SET 文件起始外

 

文件打开函数

FILE *fopen( const char *filename, const char *mode );

参数mode

    r-----为输入打开一个字符文件

    w----为输出打开一个字符文件

    a-----向字符文件尾增补数据

    rb-----为输入打开一个二进制文件

    wb----为输出打开一个二进制文件

    ab-----向字符文件尾二进制数据

    xx+---以读写方式打开文件

返回值

    打开文件正确返回文件句柄,如果打开文件失败(读时--打开一个不存在的文件,写时--文件存在但磁盘空间已满)返回一个NULL指针(地址值为0)

打开文件方式必需注意

    使用ASCII码文件,一个字节代表一个字符,便于对字符一一处理和输出,但占用较多的存储空间,并且要花费转换时间(ASCII码与二进制之间的转换)。使用二进制文件, 在内存中的数据形式与输出到外部文件中的数据形式完全一致,可以克服ASCII文件的缺点,但不直观,一个字节并不对应一个字符或一个数,不能直接输出字符形式。一般中间数据用二进制文件保存,输入输出使用ASCII文件。

 

//测试出文件长度函数

//必需以rb方式打开文件,可以正确读取文件大小

long fileLength(char *name)
{
     FILE *pfile;
     long fileLength;
     int ret;
     if((pfile = fopen(name,"rb")) == 0)

    {
          printf("文件读取错误!/n");

          return 0;

    }
     ret=fseek(pfile,0L,SEEK_END);//指针指向文件未尾
     if(ret)
     {
          printf("文件指针定位错误/n");
          return 0;
     }
     fileLength=ftell(pfile);//告诉用户位置指针的当前指向
     fclose(pfile);
     return fileLength;
}

 

//用fread,fwrite实现文件拷贝

int copyFile(char *src,char *des)
{
   FILE *psrcFile,*pdesFile;
   int readSize=1;
   long fileSize;
   psrcFile = fopen("c://tapping.wav","rb");
   pdesFile = fopen("c://def.wav","wb");

   if((psrcFile&&pdesFile) == 0)
   {

        printf("文件打开出错");

        return -1;

    }
   fileSize=fileLength("c://tapping.wav");

   unsigned char temp[10];
   while(!feof(psrcFile) && readSize != 0)
   {  
      readSize=fread(temp,10,1,psrcFile);   
     if(readSize == 0)
    {   
        fwrite(temp,fileSize,1,pdesFile);
        fileSize=0;
    }
    else
   {
       fwrite(temp,10,1,pdesFile);
       fileSize-=10;
    }  
   }
 
   fclose(psrcFile);
   fclose(pdesFile);

   return 0;
}

//实现文件读写记录数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值