码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-07-24 19:29:28      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

文件的读写操作:

  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

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

标签:

原文地址:http://www.cnblogs.com/oulton/p/5701290.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!