C语言文件操作及应用(二)

文件的读写操作:

  1. 从文件中读取一个字符(fgetc函数)

     函数原型:

  int fgetc(FILE *fp);

  2.向文件中写入一个字符(fputc函数)

     函数原型:

  int fputc(char ch,FILE *fp);//将字符ch写入到fp指向的文件中;

  3.从文件中读取一个字符串(fgets函数)

        函数原型:

  char *fgets(char *str,int n,FILE *fp);//从fp文件中读取n-1个字符放到str字符数组里(或读取到文件末尾),并在str数组最后加上’\0’

  4.向文件中写入一个字符串(fputs函数)

     函数原型:

  int fputs(char *str,FILE *fp);//把str中字符串写入到fp指的文件中

  5.fscanf函数和fprintf函数

     函数原型:

  int fscanf(FILE *fp,char *format,arg);//format为格式字符串,arg为输入列表例如:fscanf(fp,”%d”,&i);
  int fprintf(FILE *fp,char *format,...);//例如:fprintf(fp,”%s”,str);

其实fscanf与fprintf函数跟scanf,printf功能差不多,只是一个从键盘获得数据一个从文件获得;从一个将数据写入屏幕一个写入文件。

  6.fread函数和fwrite函数

     函数原型:

   int fread(void *buffer,unsigned sife,unsigned count,FILE *fp);//即将fp文件中的数据一次读取size个,一共读取count次,放到bufferbuffer是一个void型指针,指出要将读入数据存放在其中的存储区首地址。
  int fwrite(void *buffer,unsigned sife,unsigned count,FILE *fp);//类比同上 

 

 

最后是关于一个文件读写的应用:用C语言(配置OPENCV)另存BMP格式图片

#include<stdio.h>
#include"bmphead.h" //bmp文件结构
void
save_bitmap(IplImage *image) { int height=image->height; int width=image->width; int imagesize=(((image->width+3)/4)*4*image->height)*3; //按四字节对齐后的图片尺寸。 fileHeader fHeader={0}; //定义结构头 fileInfo fInfo={0}; //定义信息头 fp=fopen("./out_bmp.bmp","wb"); //以二进制写方式打开 if(!fp) { printf("cannot creat a new file!\n "); exit(0); } //Create Bitmap File Header fHeader.bfType[0]='B'; fHeader.bfType[1]='M'; fHeader.bfReserved1=0; fHeader.bfReserved2=0; fHeader.bfSize=sizeof(fileHeader)+sizeof(fileInfo)+imagesize; fHeader.bfOffBits=sizeof(fileHeader)+sizeof(fileInfo); //Create Bitmap Info Header fInfo.biSize=sizeof(fileInfo); fInfo.biHeight=-height; fInfo.biWidth=width; fInfo.biPlanes=1; fInfo.biBitCount=24; //3通道 彩图 fInfo.biSizeImage=imagesize; fInfo.biCompression=0; fInfo.biXPixPerMeter=0; fInfo.biYPixPerMeter=0; fInfo.biClrUsed=0; fInfo.biClrImporant=0; //write infor and data into file fwrite(&fHeader,sizeof(fileHeader),1,fp); fwrite(&fInfo,sizeof(fileInfo),1,fp); fwrite(image->imageData,(size_t) imagesize,1,fp); fclose(fp); }

其中bmphead.h文件如下:

/*位图头结构*/
#pragma pack(2) //按两字节对齐
typedef struct TagBITMAPFILEHEADER
{
    unsigned char bfType[2];//文件格式
    unsigned long bfSize;//文件大小
    unsigned short bfReserved1;//保留
    unsigned short bfReserved2;
    unsigned long bfOffBits; //DIB数据在文件中的偏移量
}fileHeader;

/*位图数据信息结构*/
typedef struct TagBITMAPINFOHEADER
{
    unsigned long biSize;//该结构的大小
    long biWidth;//文件宽度
    long biHeight;//文件高度
    unsigned short biPlanes;//平面数
    unsigned short biBitCount;//颜色位数
    unsigned long biCompression;//压缩类型
    unsigned long biSizeImage;//DIB数据区大小
    long biXPixPerMeter;
    long biYPixPerMeter;
    unsigned long biClrUsed;//多少颜色索引表
    unsigned long biClrImporant;//多少重要颜色
}fileInfo;

/*调色板结构*/
typedef struct TagRGBQUAD
{
    unsigned char rgbBlue; //蓝色分量亮度
    unsigned char rgbGreen;//绿色分量亮度
    unsigned char rgbRed;//红色分量亮度
    unsigned char rgbReserved;
}rgbQuad;

 

  接触这个知识以及OPENCV也是因为大一期末的C语言课程设计。

  代码放在下面了,有许多需要改进的地方,还望指出:https://github.com/oulton/college-final-project

转载于:https://www.cnblogs.com/oulton/p/5701290.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值