文件的读写操作:
- 从文件中读取一个字符(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
时间: 2024-10-02 22:02:57