深度解析C语言文件操作以及常见问题
作者:~小明学编程
文章专栏:C语言基础知识
目之所及皆为回忆,心之所向皆为过往
目录
为什么我们要使用文件
文件的打开和关闭
文件指针
文件的打开和关闭
文件的打开方式
文件的顺序读写
fgetc
fputc
fputs
fgets
fscanf
fprintf
fwrite
fread
文件的随机读取
fseek
ftell
rewind
文件读取结束的判定
大怨种feof
为什么我们要使用文件
在我们写程序的时候,大家一定发现了一个问题就是我们的程序在运行完了之后就啥也没有了就如我们的通讯录小程序我们在运行程序的时候会对其输入很多的人物信息然后我们可以对其进行修改查询等操作,但是当我们结束该程序的时候我们所输入的数据会随着我们的程序的结束而被程序给释放掉,那么我们如何解决该问题呢?这时我们会想到要是我们能有一个文件存储这些信息,当我们下次再次打开该程序的时候接着读取上一次的信息就好了,这便是我们本次要介绍的内容,我们通过一些函数直接操作文件的读写。
文件的打开和关闭
文件指针
FILE* pf;//文件指针变量
文件的打开和关闭
int main()
{int a = 10000;FILE* pf = fopen("test.txt", "wb");//打开文件fwrite(&a, 4, 1, pf);//二进制的形式写到文件中fclose(pf);//关闭文件pf = NULL;return 0;
}
文件的打开方式
文件的顺序读写
fgetc
函数的功能主要就是从标准流中读取一个字符然后写入文件中
int main()
{FILE* pw = fopen("test.txt", "w");if (pw == NULL){printf("%s\n", strerror(errno));}fputc('h', pw);fputc('a', pw);fputc('h', pw);fputc('a', pw);fclose(pw);pw = NULL;printf("读取完毕!\n");return 0;
}
fputc
int main()
{FILE* pw = fopen("test.txt", "r");if (pw == NULL){printf("%s\n", strerror(errno));}printf("%c", fgetc(pw));printf("%c", fgetc(pw));printf("%c", fgetc(pw));printf("%c", fgetc(pw));fclose(pw);pw = NULL;printf("读取完毕!");return 0;
}
通过fgetc函数我们将刚刚读入的字符再次的读出来。
fputs
函数的功能主要是写入一个字符串进入我们的文件之中,其中有两个参数,一个是我们的字符串地址,还有一个是文件指针
int main()
{char str[10]={0};FILE* pw = fopen("test.txt", "w");if (pw == NULL){printf("%s\n", strerror(errno));}//fgets(str, 10, pw);//printf("%s", str);//fgets(str, 10, pw);//printf("%s", str);fputs("hello\n", pw);fputs("world", pw);fclose(pw);pw = NULL;return 0;
}
fgets
函数的主要功能就是 从我们的流也就是文件中读取字符串,我们可以看到该函数一共有三个参数,分别是把我们读取的字符串要放入的地址,读取的个数,以及我们的文件指针。
int main()
{char str[10]={0};FILE* pw = fopen("test.txt", "r");if (pw == NULL){printf("%s\n", strerror(errno));}fgets(str, 10, pw);printf("%s", str);fgets(str, 10, pw);printf("%s", str);//fputs("hello\n", pw);//fputs("world", pw);fclose(pw);pw = NULL;return 0;
}
fscanf
函数的主要功能就是格式化的从文件中输入想要的数据
struct S
{char name[20];int age;double score;
};int main()
{struct S s = { 0 };FILE* p = fopen("text.txt", "r");if (p == NULL){printf("%s", strerror(errno));}if (p == 0){return 1;}fscanf(p, "%s %d %f", s.name, &(s.age), &(s.score));printf("%s %d %f", s.name, s.age, s.score);fclose(p);p == NULL;return 0;
}
fprintf
函数的主要功能就是格式化的将数据输出到文件之中
struct S
{char name[20];int age;double score;
};
int main()
{struct S s = { "张三",20,100.0 };FILE* p = fopen("text.txt", "w");if (p == NULL){printf("%s", strerror(errno));}if (p == 0){return 1;}fprintf(p,"%s %d %f", s.name, s.age, s.score);fclose(p);p == NULL;return 0;
}
fwrite
函数主要功能是以二进制的形式写入文件数据
其中的参数分别是要写入的项目地址,字节的大小,要写入的最大项目数和文件指针
struct S
{char name[20];int age;double score;
};
int main()
{struct S s = { "张三",20,60 };FILE* pf = fopen("test.txt", "wb");if (pf == NULL){return 1;}fwrite(&s, sizeof(struct S), 1, pf);return 0;
}
fread
函数的主要功能是从流中以二进制形式读入数据,参数和fwrite一样。
struct S
{char name[20];int age;double score;
};int main()
{struct S s = { 0 };FILE* pf = fopen("test.txt", "rb");if (pf == NULL){return 1;}fread(&s, sizeof(struct S), 1, pf);printf("%s %d %.1lf", s.name, s.age, s.score);return 0;
}
文件的随机读取
fseek
该函数可以让我们从指定的位置读取文件的内容,传参以此是文件指针,偏移量和读取的位置
int main()
{FILE* p = fopen("test.txt", "r");if (p == NULL){return 1;}fseek(p, 2, SEEK_CUR);printf("%c", fgetc(p));fclose(p);p = NULL;return 0;
}
我们可以看到我们的偏移量是2,读取位置是当前文件指针的位置
ftell
函数的主要作用是返回一个文件指针相对于起始位置的偏移量
int main()
{FILE* p = fopen("test.txt", "r");if (p == NULL){return 1;}fseek(p, 2, SEEK_CUR);printf("%c\n", fgetc(p));int ret = ftell(p);printf("%d", ret);fclose(p);p = NULL;return 0;
}
我们可以看到返回的是3。
rewind
此函数的目的是让文件指针重新回到起始的位置。
文件读取结束的判定
大怨种feof
对feof函数最大的误解就是觉得它是用来判断判断文件是否结束的,然而它的作用并不是如此,用它的时候文件一定是读取结束只是它可以告诉我们文件读取结束是因为什么是文件读完了还是文件读取失败了。
1. 文本文件读取是否结束,判断返回值是否为 EOF ( fgetc ),或者 NULL ( fgets )例如:fgetc 判断是否为 EOF .fgets 判断返回值是否为 NULL .2. 二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。例如:fread 判断返回值是否小于实际要读的个数。
int main()
{int c; // 注意:int,非char,要求处理EOFFILE* fp = fopen("test.txt", "r");if (!fp) {perror("File opening failed");return EXIT_FAILURE;}//fgetc 当读取失败的时候或者遇到文件结束的时候,都会返回EOFwhile ((c = fgetc(fp)) != EOF) // 标准C I/O读取文件循环{putchar(c);}//判断是什么原因结束的if (ferror(fp))puts("I/O error when reading");else if (feof(fp))puts("End of file reached successfully");fclose(fp);return 0;
}
深度解析C语言文件操作以及常见问题相关推荐
- C语言——文件操作及常见问题
C语言--文件基本操作及常见问题 当我们需要永久储存一些变量的时候,由于进程关闭后,会清空对应内存区域,所以我们需要把这一些数据写入外存中. 一.文件指针的创建 创建一个文件,首先现需要用指针指向文件 ...
- C语言文件操作解析(二)【转载】
http://www.cnblogs.com/dolphin0520/archive/2011/10/05/2199598.html C语言文件操作解析(二) C语言中对文件进行操作必须首先打开文件, ...
- C语言文件操作解析(二)
C语言文件操作解析(二) C语言中对文件进行操作必须首先打开文件,打开文件主要涉及到fopen函数.fopen函数的原型为 FILE* fopen(const char *path,const cha ...
- C语言文件操作解析(一)
C语言文件操作解析(一) 在讨论C语言文件操作之前,先了解一下与文件相关的东西. 一.文本文件和二进制文件 文本文件的定义:由若干行字符构成的计算机文件,存在于计算机系统中.文本文件只能存储文件中的有 ...
- c语言读写文件 eof,C语言文件操作之EOF解析
作者:海子 出处:http://www.cnblogs.com/dolphin0520/ C语言文件操作解析(五)之EOF解析 在C语言中,有个符号大家都应该很熟悉,那就是EOF(End of Fil ...
- ❤️学懂C语言文件操作读这篇就够了(万字总结,附习题)❤️
目录 一,写在前面 二,为什么使用文件 1,原因 2,数据流 3,缓冲区(Buffer) 4,C语言中带缓冲区的文件处理 5,文件类型 6,文件存取方式 三,什么是文件 1,程序文件 2,数据 ...
- C语言文件缓冲区作用,C语言 文件操作4--文件结构体FILE的理解以及缓冲区再讲...
//文件结构体FILE的理解以及缓冲区再讲 #include #include //要点:文件结构 //struct _iobuf { // char *_ptr; ------当前缓冲区内容指针 / ...
- C语言——文件操作函数 fseek、ftell、rewind详解
前言 前面,我讲了讲文件操作的第二步:文件的读写操作,里面详细的介绍了各类读写函数的用法,有兴趣的小伙伴可以去看看: C语言--文件操作(2)文件的读写操作_ 接下来,我再来讲一讲关于标题中这三个函数 ...
- C语言文件操作函数大全(看到总结的真的很好,就转载贡献给大家了)
C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof 表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * st ...
最新文章
- 配件都包括什么_婚礼婚庆服务都包括什么
- 【科普】为什么ip地址通常以192.168开头?
- 体育馆黑名单系统 的设定
- AI 质检学习报告——学习篇——AI质检产生背景和发展过程
- Spring MVC和Spring Boot的概念以及比较
- C++工作笔记-模版中class更新为typename
- JEECG 命名规范
- Spring Cloud Eureka 源码分析(一) 服务端启动过程
- 一步一步利用django创建博客应用(三)
- FormData对象提交表单及上传图片/文件
- Spring Security环境搭建+用户认证和授权+注销
- 无法创建java虚拟机_创建java虚拟机失败的解决方法
- 硬件级光线追踪:移动游戏图形的变革时刻
- RabbitMQ的交换机类型和工作模式
- python 机器学习 sklearn 朴素贝叶斯
- 多路复用——频分、时分、波分
- 什么是云密码?密信云密码服务产品提供什么?
- Excel快速入门01
- Angluar WARNING System.import() is deprecated and will be removed soon. Use import() instead
- 计算机二级C语言考试Tips
热门文章
- 抖音关键词排名优化技巧,手把手教你怎样优化抖音关键词
- 02 | 论文中的「题目、目录、摘要和结论」应该怎么写?
- 无需PS,这些工具也能轻松更换寸照底色
- svn: E170013: Unable to connect to a repository at URL ...
- Edge 浏览器 URLSearchParams bug 修复
- C++ this指针详解
- elementui[el-table]表格全选操作以及翻页选中取消相关效果
- 鲜有人知道的项目,各种邀请码偷偷做几个W
- 父类与子类的执行顺序
- 华为公司 代码编码规范