【C_Language】---C文件学习
---恢复内容开始---
又看了一遍文件的知识点了,断断续续已经看了2-3遍,也就这次花了点时间做了一下总结,以后我想都不会再去翻书了,哈哈。
1、 基于缓冲区的文件操作
2、 打开关闭文件
3、 单个字符读写
4、 文件指针定位
5、 字符串读写
6、 块读块写
7、 格式化读写
一、 读写操作都要经过一个缓冲区, 满足一定条件后再进行读入
和写入。
标准的输入以及输出, 内部为基于缓冲区的文件操作。
标准输入: stdin
标准输出: stdout
标准错误: stderr
清理缓冲区: fflush();
二、 打开关闭文件
c语言当中, 用FILE这个结构体, 描述打开的文件的详细信息。 FILE定义stdio.h文件里面。
1、 打开函数
原型: FILE *fopen(const char *path, const char *mode); //第一个参数为路径 第二个为打开的方式
绝对路径 or 相对路径:相对于顶层目录的路径 当前工程下的路径
工程下面有一个1.txt: "d://_ccccccc/1.txt"--结对路径 "1.txt" --相对路径
参数2:打开方式--读,写
返回值: 打开成功后返回操作这个文件的指针。 失败返回NULL
程序代码如下:
FILE *fp_open(void)
{
static FILE *fp;
fp = fopen(FILE_NAME,"w+"); //打开或创建一个txt文件。
if(fp != NULL)
printf("File opened succed!");
else
printf("File opened failed!");
return fp;
}
int main(void)
{
FILE *fp = fp_open(); //定义一个文件指针,指向一个采用“w+”方式打开的文件
return ;
}
在此有必要掌握mode方式表:详情见图
|
打开方式 |
含义 |
|
“r/rb” (只读) |
为输入打开一个文本/二进制文件 |
|
“w/wb” (只写) |
为输出打开或建立一个文本二进制文件 |
|
“a/ab” (追加) |
向文本/二进制文件尾追加数据 |
|
“r+/rb+” (读写) |
为读/写打开一个文本/二进制文件 |
|
“w+/wb+” (读写) |
为读/写建立一个文本/二进制文件 |
|
“a+/ab+” (读写) |
为读/写打开或建立一个文本/二进制文件 |
注意:
用”r”方式打开的文件只能进行读操作,而且该文件必须存在,不能用”r”打开一个不存在的文件
用”w”打开的文件只能进行写操作,如果原来不存在,则打开时新创建一个该文件名字的文件,如果打开原来存在的文件,则从该文件的起始位置重新继续写入,原来的内容会被覆盖掉。
用”a”打开的文件也只能进行写操作,且文件必须存在,此时文件指针移动到文件的末尾,从末尾继续添加新的数据。
“b“表示打开的是一个二进制文件,r+或w+表示可以进行读写操作。
2、 关闭函数
fclose(FILE *fp);//关闭fp指向的文件
三、 单个字符读写
写: fputc 原型: int fputc(int c, FILE *stream); //正确返回ch,错误返回EOF(-1)
读: fgetc 原型: int fgetc(FILE *stream); //正确返回读到的ch,错误返回EOF(-1)
测试函数如下:
int main(void)
{
char ch;
FILE *fp = fp_open(); //fp_open()函数见上面
ch = getchar(); //从控制台输入一个字符
fputc(ch,fp); //将字符写入文件
rewind(fp); //将文件指针重置在文件头部
printf("%c",fgetc(fp)) ; //打印出读到的字符
return ;
}
注意:
putc(ch,fp)与fputc(ch,fp)效果一致,但是putc可以作为宏定义,速度更快
getc(fp)与fgetc(fp)效果一致,但是getc可以作为宏替换,速度更快。
putchar(c) 则是fputc(c,stdout);
getchar()则是fgetc(stdin);
在此在介绍一下getc和getchar()以及putc和putchar()这两个函数的区别以及联系
输入原型: getc: int __cdecl getc(FILE *_File); 向某个文件输入一个字符
getchar: int __cdecl getchar(void); 这个是getc的一个变形,,指定文件的形参为stdin;
输出原型: putc : int __cdecl putc(int _Ch,FILE *_File); 从某个某个文件输出
putchar: int __cdecl putchar(int _Ch);
四、 文件指针定位
1、 rewind(FILE *fp); //将读写指针定位到文件开始位置。
rewind函数具体应用参考上面函数,
2、 fseek(FILE *fp,long offset,int whence);//将fp指向的文件的读写 //参数2:表示便宜字节数 参数3:表示参考位置
/*标准库下,含有这三个宏定义:SEEK_SET:起始位置 SEEK_END:末尾 SEEK_CUR:当前位置*/
rewind()其实是fsee()的一个特殊函数
rewind(fp) = fseek(fp,0,SEEK_SET); 这两者是相等的。
3.int feof(FILE *fp); //判断文件读写指针是否到达末尾, 到达返回1, 没有返回0
同理,该函数因该是也和fseek()有异曲同工之妙。
五、 字符串读写
写: fputs
原型: int fputs(const char *s,FILE *stream); //返回值,返回输入字符串的最后的‘\0’,如果输入过程被打断,则会返回最后一次输入的字符
读: fgets
原型: char *fgets(char *s, int n, FILE *stream); //返回值,成功返回接收字符串的首地址,失败的话,返回NULL
程序如下:
int main(void)
{
char s[];
FILE *fp = fp_open(); //定义一个文件指针,指向一个采用“w+”方式打开的文件
gets(s); //输入一个字符串
fputs(s,fp); //将字符串的内容输入到我文件中
rewind(fp);
printf("%s\n",fgets(s,,fp)); //从文件中读取五个字节的字符串(包括最后的‘\0’,所以实际只能取出4个)
return ;
}
这里需要的注意的是,读取数来的是一个n个字节的字符串,包含最后'\0',所以在测试的时候,只能输出4个字符,最后一个字节是'\0'。
六、 块读块写
写: fwrite
原型:size_t fread(void *buffer,size_t size, size_t count, FILE *fp);
读: fread
原型:size_t fwrite(void *buffer,size_t size, size_t count, FILE *fp);
功能:
fread:从fp所指向的文件中读取count个块,每个块的长度为size个字节,存放到以buffer为首地址的内存中(buffer必须是已经开辟空间的)、
fwrite:从以buffer为首地址的内存中读取count个快,每个 快的的长度为size个字节,写入到fp所指向的文件中。
返回值:1 成功 0 出错或者文件尾部
七、 格式化读写
fscanf 原型:int fscanf(FILE *fp,const char *format[,address,?])
fprintf 原型:int fprintf(FILE *fp,const char *format[,argument,?])
其实这俩函数可以类比printf()将数据打印到控制台上和scanf()从控制台输入数据。
fscanf()函数就是?????????????????
fprintf()函数就是将数据以某种格式输入到文件中。 //有个问题 ,输入十进制int型数字,为何按照字符串输出会能够输出???
八、其他一些函数的说明
1、 ftell()函数
原型:long ftell(FILE *fp)
功能:返回位置指针当前位置(用相对文件开头的位移量表示)
返回值:成功,返回当前位置指针位置,失败返回-1L;
2、ferror()函数
原型:int ferror(FILE *fp)
功能:测试文件是否出现错误
返回值:未出错, 0;出错,非 0
说明:每次调用文件输入输出函数,均产生一个新的 ferror 函数值,所以应及时测试fopen 打开文件时, ferror 函数初值自动置为 0
3. remove() 函数
函数原型: int remove(char* path)
功能:删除指定路径的文件
返回值:成功删除, 0;否则, -1
4. clearerr() 函数
函数原型: void clearerr(FILE *fp)
功能:使文件错误标志置为 0
返回值:无
说明:出错后,错误标志一直保留,直到对同一文件调 clearerr(fp)或 rewind 或任何其它一个输入输出函数
5.文件操作步骤
1. 打开文件
FILE* fp = fopen("路径:文件名", "打开方式"); //r/w/rb/wb/a/r+/w+ 文本文件和二进制文件
2. 文件读写
1>. 读写单个字符: fputc() fgetc()
2>. 读写字符串: fputs() fgets()
3>. 读写结构体等(读写块) fwrite() fread() //二进制
4>. 格式化读写 fprintf() fscanf()
3. 关闭文件
fclose(fp);
//文件函数总结
1、 fputc、 fgetc、 feof、 rewind
2、 rewind、 fseek
3、 fputs、 fgets
4、 fread、 fwrite
5、 fscanf、 fprintf
6、 int ftell(FILE *fp)// fseek(fp,0,SEEK_END),ftell(fp);//
---恢复内容结束---
【C_Language】---C文件学习的更多相关文章
- PHP操作XML文件学习笔记
原文:PHP操作XML文件学习笔记 XML文件属于标签语言,可以通过自定义标签存储数据,其主要作用也是作为存储数据. 对于XML的操作包括遍历,生成,修改,删除等其他类似的操作.PHP对于XML的操作 ...
- Python文件学习
Python文件学习 文章 Python文件学习 open函数 基本的用法模式:file_object=open('',access_mode='r',buffering=-1) 其中access_m ...
- python第三方库——xlrd和xlwt操作Excel文件学习
python第三方库——xlrd和xlwt操作Excel文件学习 1安装: C:\Users\Lenovo>pip install xlwtCollecting xlwt Downloadin ...
- Makefile文件学习总结
Makefile文件相当于是一种脚本编程语言,目的是实现自动化编译.编写makefile文件的过程中可以使用变量.控制结构和函数等一般编程语言的特性. Makefile文件的组成内容.makefile ...
- PE文件学习系列笔记四-C++实现PE文件的分析
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojit@qq.com 综述: 首 ...
- PE文件学习系列三-PE头详解
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojit@qq.com 最近比较忙 ...
- PE文件学习系列一为什么是PE
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入)Q Q:408365330 E-Mail:egojit@qq.com PE概述: ...
- Android Studio 学习 - AndroidManifest.xml文件学习
首先,今天发现了一个很牛逼的教程网站:慕课网(http://www.imooc.com/).有很多大牛发布的教学视频.值得收藏.学习. 今天主要参照陈启超老大的视频,学习了多个Activity之间的切 ...
- 【学习】Windows PE文件学习(一:导出表)
今天做了一个读取PE文件导出表的小程序,用来学习. 参考了<Windows PE权威指南>一书. 首先, PE文件的全称是Portable Executable,可移植的可执行的文件,常见 ...
随机推荐
- python 字符串方法isdigit()
python isdigit() 方法检测字符串是否只有数字组成. 语法: isdigit()方法语法: str.isdigit() 参数:无 返回值: 如果字符串中只含有数字则返回True,否则返回 ...
- [转]在ASP.NET WebAPI 中使用缓存【Redis】
初步看了下CacheCow与OutputCache,感觉还是CacheOutput比较符合自己的要求,使用也很简单 PM>Install-Package Strathweb.CacheOutpu ...
- VisualStudio 扩展开发 获得输出窗口内容
本文告诉大家如何拿到 VisualStudio 输出窗口的内容 在上一篇告诉大家如何开发添加菜单 点击的时候可以使用方法,如果需要拿到 VisualStudio 的输出窗口的内容,如想要开发一个插件, ...
- tensorflow在文本处理中的使用——Doc2Vec情感分析
代码来源于:tensorflow机器学习实战指南(曾益强 译,2017年9月)——第七章:自然语言处理 代码地址:https://github.com/nfmcclure/tensorflow-coo ...
- eclipse快捷键记录
转自:http://blog.csdn.net/siphiababy/article/details/74179684 ctrl+2+L这个快捷键可自动补全代码,极大提升编码效率! 注:ctrl和2同 ...
- Python3 安装pylint 及与PyCharm关联
使用如下命令: pip3 install pylint 安装完后可以看到在你的python3的目录底下的Scripts目录下有pylint.exe了 然后就可以使用pylint 评估你的代码了,如: ...
- Python自定义函数的参数
在Python中自定义的函数可以有三类不同的参数 formal parameters positional arguments Keyword Arguments When a final forma ...
- 激励函数 (Activation)
softplus是有关概率的巴拉巴拉? Torch 中的激励函数有很多, 不过我们平时要用到的就这几个. relu, sigmoid, tanh, softplus. 那我们就看看他们各自长什么样啦. ...
- Django 中配置MySQL数据库
在Django的项目中会默认使用sqlite的数据库 配置MySQL需要在setting.py 里加入以下设置: 配置数据库 DATABASES = { 'default': { 'ENGINE': ...
- 机器学习之——集成算法,随机森林,Bootsing,Adaboost,Staking,GBDT,XGboost
集成学习 集成算法 随机森林(前身是bagging或者随机抽样)(并行算法) 提升算法(Boosting算法) GBDT(迭代决策树) (串行算法) Adaboost (串行算法) Stacking ...