当前位置:网站首页>c语言文件基本操作总结
c语言文件基本操作总结
2022-08-09 23:42:00 【BSP初级小学僧】
博客主页:https://blog.csdn.net/weixin_46094737?type=blog
欢迎评论留言 如有错误敬请指正!
本文由小学生廉原创,首发于 CSDN
未来很长,值得我们全力奔赴更美好的生活!
一、文件
在对计算机的使用中我们几乎离不开文件。例如常见的有word 文档,txt文本文件,图片文件、音频文件等。
1.什么是文件?
文件是以计算机硬盘为载体存储在计算机上的信息集合。是数据源的一种,最主要的作用是保存数据。
在程序设计中,我们可将文件分为两大类:程序文件和数据文件
(1)程序文件
包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序文件(windows环境后缀为.exe)。
(2)数据文件
文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。
2.文件名
文件名是文件存在的标识,操作系统根据文件名来对其进行控制和管理。每个文件都被设定一个指定的名称,由文件主名和扩展名组成。
即:一个文件要有一个唯一的文件标识,以便用户识别和引用。
文件名包含三个部分:文件路径+文件名主干+文件后缀
例:D:\Windows Kits\10\Lib\test.txt
二、文件的打开和关闭
1.文件指针
我们对文件进行一系列的操作——打开文件、关闭文件、向文件中写入数据、从文件中读出数据。所有的操作都离不开文件指针。
文件指针: FILE*
FILE:每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中,取名FILE。
FILE* :通过一个FILE的指针来维护这个FILE结构的变量,对文件进行操作。
(1)fopen函数
在C语言中,操作文件之前应该先打开文件。使用 <stdio.h> 头文件中的 fopen() 函数可以打开文件。
FILE *pf=NULL;
pf=fopen("test.txt","r"); //只读
(2)fclose函数
在执行完文件的操作后,要用 fclose() 函数进行“关闭文件”操作。以此释放相关资源,避免数据丢失。同时也可提高系统整体的执行效率。
fclose() 的用法为:fclose(FILE *fp);
fclose(pf);
文件的打开方式分为以下几类:
文件打开方式 | 含义 | 若指定文件不存在 |
“r”(只读) | 打开一个存在的文本文件,然后读取数据 | 出错 |
“w”(只写) | 打开一个存在的文本文件,然后写入数据(注意会清空) | 创建一个新文件 |
“a”(追加) | 在文本文件最后追加数据 | 出错 |
“r+”(读写) | 打开一个文本文件,可读可写 | 出错 |
“w+”(读写) | 打开一个文本文件,可读可写 | 创建一个新文件 |
“a+”(读写) | 打开一个文本文件,可读可写,在文本最后追加数据 | 创建一个新文件 |
三、文件的顺序读写
打开文件后要对文件进行具体的操作,以下为文件的读写函数
功能 | 函数名 |
---|---|
字符输入函数 | fgetc |
字符输出函数 | fputc |
文本行输入函数 | gets |
文本行输出函数 | fputs |
格式化输入函数 | fscanf |
格式化输出函数 | fprintf |
二进制输入 | fread |
二进制输出 | fwrite |
在使用时注意两个fread函数以及fwrite函数的用法
fread(目标读入,类型字节数,开辟读入空间,被读取文件)
fwrite(目标写入,类型字节数,开辟写入空间,写入文件)
fread函数
fread(str02,1,5,pf);
fwrite函数
FILE *pf;
char str[]="123456";
char str02[20];
pf=fopen("fire_fread.txt","w");
fwrite(str,1,7,pf);
fclose(pf);
练习源代码:
#include <stdio.h>
void fire_test(void)
{
FILE *pf=NULL;
pf=fopen("test.txt","r"); //只读
pf=fclose;
pf=fopen("test.txt","w");//只写
fputc('a',pf);
pf=fopen("test.txt","a");//追加
fputc('1',pf);//在文件你内容后面追加写入一个字符'1';
pf=fopen("test.txt","r");
printf("指针pf的地址为:%#p\n",pf);
char ch;
ch=fgetc(pf);
printf("%c",ch);
fclose(pf);
pf=fopen("test02.txt","r");
printf("指针pf的地址为:%#p\n",pf);
if(NULL==pf)
{
printf("无此文件!");
}
else
{
fputc(50,pf);
}
}
void fire_fputs(void)
{
char str[20]="换羽重生!";
FILE *pf;
pf=fopen("fire_fputs.txt","w");
fputs(str,pf);
fputc('\n',pf);
fputs("首战必胜!",pf);
fclose(pf);
}
void fire_a(void)
{
char str[20]="test r-w-a";
FILE *pf;
pf=fopen("fire_fputs.txt","a");
fputs(str,pf);
fclose(pf);
}
void fire_fgets(void)
{
char str[40];
printf("str=%s\n",str);
FILE *pf;
pf=fopen("fire_fgets.txt","r");
if(NULL==pf)
{
printf("无此文件");
}
else
{
fgets(str,40,pf);
}
printf("str=%s",str);
fclose(pf);
}
void fire_fread(void)
{
FILE *pf;
char str[]="123456";
char str02[20];
pf=fopen("fire_fread.txt","w");
fwrite(str,1,7,pf);
fclose(pf);
pf=fopen("fire_fread.txt","r");
fread(str02,1,5,pf);
printf("%s",str02);
fclose(pf);
}
int main()
{
fire_fread();
// fire_test();
// fire_fputs();
// fire_fgets();
// fire_a();
return 0;
}
边栏推荐
- Distributed database problem (2): data replication
- 关于HBuilder X鼠标变为_ 替换字符的问题
- JVM Memory and Garbage Collection - 10. Direct Memory
- ECCV 2022 | Microsoft Open Source TinyViT: Pre-training Capabilities for Small Models
- 【「收藏」Oracle 数据库安装】
- 微服务【同步和异步通讯详解】第6章
- JVM内存和垃圾回收-10.直接内存
- 服装店管理系统如何推送活动?
- Today's sleep quality record 61 points
- ES6 Beginner to Mastery #15: Generator Usage
猜你喜欢
最高月薪15K,谁有历经千辛万苦的意志,谁就能收获属于自己的成功~
The technical aspects of the byte have been passed, and the salary has been negotiated for 20K*13, but the result is still being brushed. I asked the HR why...
ES6 Beginner to Mastery #15: Generator Usage
服装店管理系统如何推送活动?
2022金九银十工作潮,怎么样才能成功跳槽面试拿到高薪呢?
深入理解Aarch64内存管理
收银管理软件如何做好员工管理?
labelme标注的json标签转txt格式
【云原生】Kubernetes编排工具精讲
3.4 - 编译与解释 3.5 - 编译过程 3.8 - 文法
随机推荐
Why don't suggest you run in Docker Mysql?
关于HBuilder X鼠标变为_ 替换字符的问题
ECCV 2022 | 微软开源TinyViT :搞定小模型的预训练能力
hql语言
redis分布式锁代码示例
LSTM-based distributed energy generation prediction (Matlab code implementation)
上交所实时行情文件汇总
南大通用数据库-Gbase-8a-学习-04-部署分布式集群
阿里云短信服务开通
【obs】obsqsv11 硬编 及与metartc codec对比
Creo5.0入门教程赠素材
最高月薪15K,谁有历经千辛万苦的意志,谁就能收获属于自己的成功~
【数据存储】signed,unsigned到底怎么区分?如何计算?
[SSH]如何敲一条线
【C语言】指针和数组的深入理解(第四期)
MATLB|And her ups and downs and finally reached the peak of life [Romantic Journey]
arm-4-裸板开发
构建平衡二叉树「建议收藏」
C语言--数据的存储(上)
GoLang 使用 goroutine 停止的几种办法