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

时间: 2024-10-02 22:02:57

C语言文件操作及应用(二)的相关文章

总结文件操作函数(二)-C语言

格式化读写: #include <stdio.h> int printf(const char *format, ...);                   //相当于fprintf(stdout,format,-); int scanf(const char *format, -); int fprintf(FILE *stream, const char *format, ...);      //中间的参数为写入文件的格式 int fscanf(FILE *stream, const

C语言文件操作(二)

实例2:读取字符文件,每次读入一个缓存里面. #include<stdio.h> #include <stdlib.h> #define MAXLEN 1024 int main() { FILE *fin; FILE *fout=fopen("c:\\dest.txt","wt"); char buf[MAXLEN]; if((fin=fopen("c:\\test.txt","rt"))!=NULL

go语言文件操作,这期资料比较详细( 欢迎加入go语言群: 218160862 )

go语言文件操作,这期资料比较详细 欢迎加入go语言群: go语言深圳群 golang深圳 218160862 文件操作 func Open(name string) (file *File, err error),*File 是实现了 io.Reader这个接口byte[] 转化为 bytes.Buffer:bytes.NewBuffer([]byte). 一.建立与打开 建立文件函数:func Create(name string) (file *File, err Error)func N

C语言文件操作函数的编写

 编写文件操作的头文件 /************************************************************************** Copyright(C)    :2014-08-5 toto Filename       :file.h Author          :涂作权 Version         :V1.1 Date            :2014-08-05 Description     :文件操作的头文件 Others  

C 语言文件操作

1. 数据流:     程序与数据的交互以流的形式进行.fopen 即打开数据流,fclose 即刷新数据流.     所谓数据流,是一种抽象,表示这段数据像流一样,需要逐步接收,不能随机存取:也意味着是一段连续的内容,每块数据之间的顺序是确定的.比如一个很大的文件,不能一次性加载到内存里面,无法直接获取文件任意位置的内容,只能逐渐加载到内存.     比如 TCP 被抽象为 stream 而 UDP 被抽象为 block.     2. 缓冲区:     fopen 时, 磁盘 --> 缓冲区

c语言文件操作函数

c语言文件操作函数大全 fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const char * mode); 函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态. mode有下列几种形态字符串: r 打开只读文件,该文件必须存在. r+ 打开可读写的文件,该文件必须存在. w 打开只写文件,若文件存在则文件长度清为0,即该文件

C语言文件操作(一)

实例1:读写字符文件,每次读取一个字符. #include<stdio.h> #include <stdlib.h> int main() { FILE *fpin ; FILE *fpout; char c; fpout=fopen("c:\\dest.txt","wt"); if((fpin=fopen("c:\\test.txt","rt"))!=NULL) { c = fgetc(fpin);

C语言文件操作(三)

实例3:读写字节文件,每次读入一个缓存里面. #include<stdio.h> #include <stdlib.h> #define MAXLEN 1024 int main() { FILE *fpin ; FILE *fpout; unsigned char buf[MAXLEN]; int c; fpout=fopen("c:\\dest.jpg","wb"); if((fpin=fopen("c:\\test.jpg&q

【转】c#文件操作大全(二)

61.文件夹移动到整合操作 FolderDialog aa = new FolderDialog();            aa.DisplayDialog();            if (aa.Path != "")            {                string filename = Path.GetFileName(%%1);                string path=(aa.Path.LastIndexOf("\")