C语言文件的定义,如何对文件进行操作,文件指针,如何定义指向文件的指针,通过文件指针对文件进行操作,文件应用举例,二进制文件相关操作,文件定位

一、什么是文件

1、文件的定义:文件是相关信息的集合
信息:
文字、文件的扩展名为:txt,doc
声音、文件的扩展名为:mp3,wav,wma
图像、文件的扩展名为:bmp,jpg,gif
视频、文件的扩展名为:AVI、mov、rmvb、rm、FLV、mp4、3GP
2、文件的取名:
主文件名.扩展名
1234563.txt
3、文件的分类(在C程序当中对文件的分类)
A:文本文件(存放字符/文字的文件.txt)
B:二进制文件(.data)把结构体的信息写入的文件被称为二进制文件

二、C程序对文件的操作

读操作:从文件里面把文件的内容取出来,并输出到屏幕(不会改变文件的内容)
写操作:把一些内容往文件里面写入(会改变文件的内容)

1、C程序对文件的操作

C程序通过文件的指针并加上一些函数然后对文件进行操作的

2、什么是文件指针

文件指针:这个指针是用来存放文件的首地址。这个指针是专门用来指向文件的。

3、如何来定义文件指针

格式:

FILE *指针名;

比如:定义了一个指针为fp,这个指针以后只能指向文件,之后要把文件的首地址赋值给该指针

FILE *fp;

4、如何给文件指针赋予初值

如何赋值:一般通过fopen这个函数对指针进行赋值
fopen功能
A:打开文件。
B:同时会返回打开的那个文件的首地址。
C:该函数实际上就是地址。
格式

fopen("要打开的文件名","打开方式");

说明:
1、打开方式是表明打开文件之后要读还是要写
2、打开方式:

r:要打开文件之后要读文件(read) 文本文件
w:要打开文件之后要写文件(write) 覆盖
a:要打开文件之后要追加文件(append) 把新的数据加到末尾
rb:要打开二进制文件进行读
wb:要打开二进制文件进行写

如果打开方式中加了一个"b"就表示要对二进制文件进行操作

3、如果打开的文件名的路径当中含义 \ 的时候就要用双杠 \ \ 。

//打开My.txt这个文本文件进行读的操作。
fopen("c:\\chen\\My.txt","r");


使用文件指针
打开文件

FILE *fp;
//fopen该函数返回的是文件的地址
fp=fopen("要打开文件的名称。即包含文件名的路径","打开方式");

关闭文件
A:通过fopen函数能够打开文件,之后对文件进行操作。
B:操作完毕之后,一定要关闭文件。
C:格式:fclose(文件指针名);

程序操作文件的一般格式:

FILE *fp;//定义一个文件指针
fp=fopen("打开文件名","打开方式");//把文件指针具体的去指向一个文件
//然后对文件进行操作
fclose(fp);//要关闭文件

4、对文件操作的函数:

1)fgetc函数
功能:从fp所指向的文件里面读取出一个字符。 (r)
格式:字符型变量=fget(fp); //fp是一个文件指针
文件一定要以读的方式打开,之后指针会自动向后移动一个位置

2)fputc函数:
功能:从fp所指向的文件里面写入一个字符。 (w)
格式:fputc(要写入的字符,fp);
文件一定要以写的方式打开,之后指针会自动向后移动一个位置

3)fgets函数:
功能:从fp所指向的文件里面读取出来一个字符串
格式:fgets(str,n,fp);它会读出n-1个字符,留一个字符为\0
str:存放字符串的一个数组,n表示读取出来字符的个数,fp是文件的指针

4)fputs函数
功能:把字符串写入到fp和指向的文件当中去
格式:fputs(str,fp);把str当中所有的字符写入到fp里面去

5)专门用来对二进制文件进行操作
A:fwrite函数
功能:把一个结构体变量当中的信息以二进制的形式写入到指定的文件当中去
格式:fwrite(&结构体变量名,sizeof(结构体类型),1,fp);
B:fread函数
功能:从fp所指向的文件当中读出一条信息,存放在一个结构体变量当中
格式:fread(&结构体变量名,sizeof(结构体类型),1,fp);

6) feof函数
功能:判断指向文件的指针是否指向文件的末尾
格式:feof(文件指针);返回1则代表指向了文件的末尾,返回0则代表没有指向文件末尾
feof(fp);
一般的用法:while(!feof(fp));
//(!feof(fp))返回0则代表指向了文件的末尾,返回1则代表没有指向文件末尾

三、对文件进行操作的案例

1、对文件进行读取操作

1)从文件当中读取一个字符
ch=fgetc(fp); //表示从fp指向的文件当中指向一个字符 ,并存放到变量ch里面
A:新建一个txt文件

B:

#include<stdio.h>
void main(){FILE *fp;char ch; fp=fopen("c:\\chen\\My.txt","r");//要以读的方式打开一个文本文件,并让指针fp指向这个文件ch=fgetc(fp); //表示从fp指向的文件当中指向一个字符 ,并存放到变量ch里面printf("%c",ch); //一定要关闭文件fclose(fp);
}


2)如何从一个文件当中把所有的都读取出来
当文件没有读完时反复的读取文件当中的字符
A:如何判断一个文件指针是否到了末尾
feof函数:能够判断指针是否到文件的末尾
格式:feof(指向文件的指针);

 feof(fp);

该函数返回值为0时没有到末尾
如果返回值为1表示到了末尾
一般:
while(!feof(fp))//当不到末尾

#include<stdio.h>
void main(){FILE *fp;char ch; //要以读的方式打开一个文本文件,并让指针fp指向这个文件fp=fopen("c:\\chen\\My.txt","r");while(!feof(fp)){//当不到文件末尾时就反复的读取   ch=fgetc(fp); //表示从fp指向的文件当中指向一个字符 ,并存放到变量ch里面printf("%c",ch); }//一定要关闭文件fclose(fp);
}

2、对文件进行写的操作

1)向文件当中写入单个字符
A:创建一个文件

#include<stdio.h>
void main(){FILE *fp;char ch;fp=fopen("c:\\chen\\You.txt","w");ch='A';fputc(ch,fp);fclose(fp);
}


2)向文件当中写入多个字符(覆盖)
用户输入字符,然后将用户输入的字符写入到对应的文件当中

#include<stdio.h>
void main(){FILE *fp;char ch[100];fp=fopen("c:\\chen\\You.txt","w");//覆盖旧的字符printf("请输入一个字符串:");gets(ch); int i; for(i=0;ch[i];i++){fputc(ch[i],fp);//将用户输入的文字写入到fp指向的文件当中 }fclose(fp);
}


3)向文件当中写入多个字符(追加)

#include<stdio.h>
void main(){FILE *fp;char ch[100];fp=fopen("c:\\chen\\You.txt","a");//a为追加printf("请输入一个字符串:");gets(ch); int i; for(i=0;ch[i];i++){fputc(ch[i],fp);//将用户输入的文字写入到fp指向的文件当中 }fclose(fp);
}



3)fgets函数:的用法

#include<stdio.h>
void main(){FILE *fp;char str[100];fp=fopen("c:\\chen\\My.txt","r");//以读的方式将文件的地址值赋予指针fpfgets(str,5,fp); //从fp指向的文件当中地区5个字符,放入到str字符数组当中 puts(str);//输出字符数组 fclose(fp);
}

fgets(str,f,np);它会读出n个字符,留一个字符为\0,所以器实际字符串的长度为n-1,读取出来的字符串为n-1个

4)fputs函数:的用法

#include<stdio.h>
void main(){FILE *fp;char str[100]={"abcd1235"};fp=fopen("c:\\chen\\My.txt","w");//以写的方式将文件的地址值赋予指针fpfputs(str,fp);fclose(fp);
}


5)专门用来对二进制文件进行操作
A:fwrite函数:的用法
功能:把一个结构体变量当中的信息以二进制的形式写入到指定的文件当中去
格式:fwrite(&结构体变量名,sizeof(结构体类型),1,fp);

向文件当中输入单个结构体变量

#include<stdio.h>
typedef struct worker{char Id[10];char Name[10];int Age;
}WOR;//结构体类型为WOR
void main(){FILE *fp;WOR w[5]={{"w1","张三",34},{"w2","李四",54},{"w3","二狗",64},{"w4","狗娃",74},{"w5","小样",84}};fp=fopen("c:\\chen\\worker.data","wb");//以写入的方式打开一个二进制文件用fp指向该文件的首地址值 fwrite(&w[0],sizeof(WOR),1,fp);//通过fwrite函数对文件进行写入 fclose(fp);//关闭文件
}

运行以后


向文件当中输入多个结构体变量

#include<stdio.h>
typedef struct worker{char Id[10];char Name[10];int Age;
}WOR;//结构体类型为WOR
void main(){FILE *fp;WOR w[5]={{"w1","张三",34},{"w2","李四",54},{"w3","二狗",64},{"w4","狗娃",74},{"w5","小样",84}};int i; fp=fopen("c:\\chen\\worker.data","wb");//以写入的方式打开一个二进制文件用fp指向该文件的首地址值 for(i=0;i<5;i++){fwrite(&w[i],sizeof(WOR),1,fp);//通过fwrite函数对文件进行写入}fclose(fp);//关闭文件
}

文件里面的样子

B:fread函数
功能:从fp所指向的文件当中读出一条信息,存放在一个结构体变量当中
格式:fread(&结构体变量名,sizeof(结构体类型),1,fp);
从二进制文件当中读取单行内容

#include<stdio.h>
typedef struct worker{char Id[10];char Name[10];int Age;
}WOR;//结构体类型为WOR
void main(){WOR w; FILE *fp;//打开一个二进制文件进行读fp=fopen("c:\\chen\\worker.data","rb");//将fp指向的二进制文件读取到的内容放入到结构w当中fread(&w,sizeof(WOR),1,fp); printf("%s\t%s\t%d",w.Id,w.Name,w.Age);fclose(fp);
}


从二进制文件当中读取多行内容

#include<stdio.h>
typedef struct worker{char Id[10];char Name[10];int Age;
}WOR;//结构体类型为WOR
void main(){WOR w; FILE *fp;fp=fopen("c:\\chen\\worker.data","rb");//打开一个二进制文件进行读while(!feof(fp)){//判断文件的指针是否到达文件的末尾 fread(&w,sizeof(WOR),1,fp);//将fp指向的二进制文件读取到的内容放入到结构w当中 printf("%s\t%s\t%d\n",w.Id,w.Name,w.Age);}fclose(fp);
}

四、文件定位

1、文件指针的定位

2、当文件刚刚打开的时候,文件指针会自动的指向文件的开头

3、随着我们调用读写函数文件指针也会自动的向后移动

4、有时候为了编程需要,我们可能要通过程序手动的去移动文件指针

5、文件定位函数:

A:fseek函数
功能:用来移动文件指针到文件的某一个位置
格式:fseek(fp,移动的距离【位移量】,参考点【起始点】);

参考点
SEEK_SET:从文件的开始的位置
SEEK_END:从文件的末尾
SEEK_CUR:文件的当前位置

位移量
正数表示向文件的末尾移动
为负数表示向文件的开头方向移动

案例一、

证明每次调用fgetc指针都会自动向后移动一位

#include<stdio.h>
#include<string.h>
void main(){FILE *fp;char ch,ch1; //以读的方式打开文件,并将文件指针fp指向文件的开头fp=fopen("c:\\chen\\My.txt","r"); ch=fgetc(fp);//表示从文件里面读取一个字符ch1=fgetc(fp);//表示从文件里面读取一个字符printf("%c,%c",ch,ch1); fclose(fp);
}

案例二、

SEEK_SET:从文件的开始的位置

#include<stdio.h>
#include<string.h>
void main(){FILE *fp;char ch; //以读的方式打开文件,并将文件指针fp指向文件的开头fp=fopen("c:\\chen\\My.txt","r"); fseek(fp,2,SEEK_SET);ch=fgetc(fp);//表示从文件里面读取一个字符printf("%c",ch); fclose(fp);
}

fseek(fp,2,SEEK_SET);//表示以开始的位置(SEEK_SET)将指向文件的指针(fp)向后移动动两个位置



改进上方算法练习
SEEK_CUR:文件的当前位置

#include<stdio.h>
#include<string.h>
void main(){FILE *fp;char ch; //以读的方式打开文件,并将文件指针fp指向文件的开头fp=fopen("c:\\chen\\My.txt","r"); fseek(fp,2,SEEK_SET);//表示以文件当前的位置开始为参考点向尾部移动2个单位  ch=fgetc(fp);//表示从文件里面读取一个字符printf("%c",ch); fseek(fp,1,SEEK_CUR);//以当前的位置为参考点,向后移动一个单位 ch=fgetc(fp);//表示从文件里面读取一个字符printf("%c",ch); fclose(fp);
}



改进上述算法
SEEK_END:从文件的末尾

#include<stdio.h>
#include<string.h>
void main(){FILE *fp;char ch; //以读的方式打开文件,并将文件指针fp指向文件的开头fp=fopen("c:\\chen\\My.txt","r"); fseek(fp,-2,SEEK_END);//表示以文件末尾的位置开始为参考点向头部移动2个单位  ch=fgetc(fp);//表示从文件里面读取一个字符printf("%c",ch); fclose(fp);
}


四、rewind函数:

功能:把文件指针移动带开头
格式:rewind(指向文件的指针);
rewind(fp);相当于fseek(fp,0,SEEK_SET);//以文件开头文基准向后移一个单位

#include<stdio.h>
#include<string.h>
void main(){FILE *fp;char ch; //以读的方式打开文件,并将文件指针fp指向文件的开头fp=fopen("c:\\chen\\My.txt","r"); ch=fgetc(fp);//表示从文件里面读取一个字符,并且指针会自动指向下一个位置 printf("%c",ch); rewind(fp);会把指针移动到开头 ch=fgetc(fp);//表示从文件里面读取一个字符,并且指针会自动指向下一个位置 printf("%c",ch); rewind(fp);//要把指针移动到开头 fclose(fp);
}

#include<stdio.h>
#include<string.h>
void main(){FILE *fp;char ch; //以读的方式打开文件,并将文件指针fp指向文件的开头fp=fopen("c:\\chen\\My.txt","r"); ch=fgetc(fp);//表示从文件里面读取一个字符,并且指针会自动指向下一个位置 printf("%c",ch); //rewind(fp);//会把指针移动到开头 fseek(fp,0,SEEK_SET);//会把指针移动到开头 ch=fgetc(fp);//表示从文件里面读取一个字符,并且指针会自动指向下一个位置 printf("%c",ch); rewind(fp);//要把指针移动到开头 fclose(fp);
}

C语言文件指针,如何对文件进行操作,文件指针FILE,指向文件指针相关推荐

  1. c#读取solidworks文件_CSharpSolidworks C#打开程序路径中后缀为SLDPRT的 文件 C#编程 238万源代码下载- www.pudn.com...

    文件名称: CSharpSolidworks下载 收藏√  [ 5  4  3  2  1 ] 开发工具: C# 文件大小: 402 KB 上传时间: 2013-10-30 下载次数: 11 详细说明 ...

  2. python同时对文件进行读写操作-Python实现的读取文件内容并写入其他文件操作示例...

    本文实例讲述了Python实现的读取文件内容并写入其他文件操作.分享给大家供大家参考,具体如下: 文件目录结构,如图: read_file.py是工作文件,file_test.py是读取文件源,wri ...

  3. C++之文件操作探究(一):写文件——文本文件

    相关博文:C++之文件操作探究(一):写文件--文本文件 相关博文:C++之文件操作探究(二):读文件--文本文件 相关博文:C++之文件操作探究(三):写文件--二进制文件 相关博文:C++之文件操 ...

  4. python连续写入文件操作_Python实现的读取文件内容并写入其他文件操作示例

    本文实例讲述了Python实现的读取文件内容并写入其他文件操作.分享给大家供大家参考,具体如下: 文件目录结构,如图: read_file.py是工作文件,file_test.py是读取文件源,wri ...

  5. python读取文件内容并操作_Python实现的读取文件内容并写入其他文件操作示例

    本文实例讲述了Python实现的读取文件内容并写入其他文件操作.分享给大家供大家参考,具体如下: 文件目录结构,如图: read_file.py是工作文件,file_test.py是读取文件源,wri ...

  6. C语言实现操作系统简单的P V操作

    C语言实现操作系统简单的P V操作 简单说明 cpp的文件,C语言的语法 代码如下 实现效果 简单说明 cpp的文件,C语言的语法 代码如下 #include "stdio.h" ...

  7. linux rewind函数,C语言rewind()函数:将文件指针重新指向文件开头

    头文件:#include rewind()函数用于将文件指针重新指向文件的开头,同时清除和文件流相关的错误和eof标记,相当于调用fseek(stream, 0, SEEK_SET),其原型如下: v ...

  8. c语言中 文件的字符串输入函数是6,【C语言】文件操作及输入输出格式(文件常用的库函数)...

    参考中国大学MOOC 浙江大学翁恺C语言程序设计在线课程 目录 常用文件输入输出符号格式及标准 常用应用对象为文件的库函数简介: 库函数部分: 文件创建.打开.阅读: 数据块写入读出(只有这两个函数可 ...

  9. 《c语言从入门到精通》看书笔记——第14章 文件

    1.文件的基本操作 (1)文件指针 文件指针是指向文件有关信息的指针,这些信息包含文件名,状态,和当前位置,他们保存在一个结构体变量中.在使用文件时需要在内存中为其分配空间,用以存放文件的基本信息.该 ...

  10. 【C语言】文件操作及输入输出格式(文件常用的库函数)

    参考中国大学MOOC 浙江大学翁恺C语言程序设计在线课程 目录 常用文件输入输出符号格式及标准 常用应用对象为文件的库函数简介: 库函数部分: 文件创建.打开.阅读: 数据块写入读出(只有这两个函数可 ...

最新文章

  1. ImportError: Failed to import `pydot`. Please install `pydot`. For example with `pip install pydot`
  2. [Eclipse]GEF入门系列(九、增加易用性)
  3. Sublime Text 3 插件安装
  4. 开发函数计算的正确姿势 —— 安装第三方依赖
  5. mysql字符串等于失效_MySql整型索引和字符串索引失效或隐式转换问题
  6. linux mysql 密码策略_Linux Ubuntu 14 MySQL 密码策略(复杂度)和审计插件
  7. 教你如何安装字体包 ——思源免费商用字体
  8. hashMap底层原理
  9. 顶级域名、一级域名、二级域名、子域名、父域名
  10. lodop 条码类型说明
  11. 三毛3--亲爱的婆婆大人
  12. 国外java、IT技术网站汇总
  13. Apache Kylin使用总结
  14. shell中的try...catch...
  15. 群晖服务器+微信同步,群晖服务器 云同步
  16. 基于深度学习的2D图像目标检测
  17. 【Unity 3D 从入门到实战】Unity 3D 导航系统
  18. 智能门锁怎么选(1)
  19. python全栈人工智能192集视频_黑马程序员分享:python全栈开发环境构建
  20. 华里士公式的推导及其推广

热门文章

  1. 图文详解win7实现局域网共享文件
  2. war3第一视角集合 UD篇
  3. 国内身份证号码的正则验证
  4. 前端需要了解的色彩知识
  5. 工程测量(平面高程控制网)
  6. 使用log4j失误导致系统假死,记录一下
  7. iphone8强制重启进入恢复模式进入DFU模式[2021-11-05]
  8. 中标麒麟NeoKylin系统使用--使用UFEI安装中标麒麟系统过程中/dev/disk/by-label/NeoKylin does not exit问题的解决
  9. 阿拉伯数字 0、1、2、3、4、5、6、7、8、9 书写规范
  10. c语言 牛逼代码,装逼技巧:程序员如何用代码证明自己牛逼!