文件的使用详解怎么写,文件的使用详解方法
Yyds干货库存
@TOC
一.文件的分类
考虑到文件的功能,分为程序文件和数据文件。
程序文件包括源程序文件(后缀。c)、目标文件(后缀。obj)和可执行程序(后缀。exe)。
数据是程序运行时读写的数据。
二、文件的打开和关闭
1.文件指针
有一个文件绑定了一个文件信息区,可以看作是一个结构的变量。
使用typedef后重命名为文件
2.文件打开
用fopen打开这个文件,主动创建文件信息区,并传递文件信息区的地址。
Filename是文件名,mode是文件的打开方法。
打开fopen文件失败将返回NULL
(1).文件打开方法
为w打开一个文件,如果这个文件不存在,使用w会自动创建一个空文件。
每次使用W,如果文件中有任何内容,都会被销毁。
r读取文件。如果找不到该文件,将会报告一个错误。
2.文件关闭
流代表流
#包含stdio.h
int main()
FILE*pf=fopen(text.txt , w );//打开文件
If(pf==NULL)//如果文件无法打开,将会报错。
佩罗尔(‘福彭’);
返回1;
fclose(pf);//关闭文件
pf=NULL
返回0;
三。文档的顺序读写
需要注意的事项
文件中的输入和输出与以前不太一样。
输入——表示从文件到内存的输入,即读取。
输出——表示从内存到文件的输出和写入。
流动的概念
高度抽象的概念
正常情况下,程序需要对每个外部设备使用多种转换方法,流充当转换中介。
通过程序将数据输入到流中,通过流找到外部设备的读写方式。
1.字符输出函数——fputc
写文件
C字符的返回值int表示ASCII值
流代表流
将字符传递到流中。
#define _CRT_SECURE_NO_WARNINGS
#包含stdio.h
int main()
FILE*pf=fopen(text.txt , w );//打开text.txt文件进行写入
If(pf==NULL)//无法判断文件是否打开。
佩罗尔(‘福彭’);
返回1;
fputc(a ,pf);//将字符传递到流中
foutc(b ,pf);
fputc(c ,pf);
fclose(pf);//关闭文件
pf=NULL
返回0;
}
## 2.字符输入功能——fgetc
!【在此插入图片说明】(https://s2.51cto.com/images/blog/202209/16100054 _ 6323d8d6bd9264056.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type _ zmfuz 3 poz w5 nagvpdgk=/resize,m_fixed,w_750)
Sream代表心流
读取流中的文件。
如果正常返回字符的ASCII值被读取
如果读取失败或文件结尾返回EOF。
关于返回类型为int的原因:
EOF是值为-1的文件结束标志。
字符的ASCII值可以作为整数计算。
也就是说,返回类型是int
# define _ CRT _ secure _ no _ warnings//需要在VS中关闭文件
#包含stdio.h
int main()
FILE*pf=fopen(test.txt , r );//从文件test.txt中读取
If(pf==NULL)//假设test.txt包含abcd
佩罗尔(‘福彭’);
返回1;
int ret=fgetc(pf);
printf(%c\n ,ret);//a
ret=fgetc(pf);
printf(%c\n ,ret);//b
ret=fgetc(pf);
printf(%c\n ,ret);//c
fclose(pf);
pf=NULL
返回0;
3.文本行输出功能——fputs
写文件
表示一个字符串
Sream代表心流
在文件中写一行。
#define _CRT_SECURE_NO_WARNINGS
#包含stdio.h
int main()
FILE*pf=fopen(text.txt , w );
if(pf==NULL)
佩罗尔(‘福彭’);
返回1;
fput( abcdef \ n ,pf);
fputs(qwerty\n ,pf);
fclose(pf);
pf=NULL
返回0;
}
4.文本行输入功能——fgets
读取流中的字符串。
表示一个字符串
流代表流
n表示读取的最大字符数。
N-1是实际读取的字符数,因为\0被添加到读取的字符串中。
#define _CRT_SECURE_NO_WARNINGS
#包含stdio.h
int main()
FILE*pf=fopen(text.txt , r );//假设文件是abcdefg
if(pf==NULL)
佩罗尔(‘福彭’);
返回1;
char arr[40={ 0 };
fgets(arr,4,pf);
printf(%s\n ,arr);//a b c
fgets(arr,4,pf);
printf(%s\n ,arr);//d e f
fclose(pf);
pf=NULL
返回0;
}
5.打印格式功能——fprintf
将文件写入格式化数据。
流代表流
该格式表示格式(%s %d)
#define _CRT_SECURE_NO_WARNINGS
#包含stdio.h
结构S
char name[20];
int age
char sex[20];
int main()
结构s={ 张三,18,男);
FILE*pf=fopen(test.txt , w );
if(pf==NULL)
佩罗尔(福彭);
返回1;
fprintf(pf, %s %d %s ,s.name,s.age,s . sex);
fclose(pf);
pf=空
返回0;
6.格式化输入函数——fscanf
溪流代表流
格式代表格式
从文件中读取一个格式化的数据
#define _CRT_SECURE_NO_WARNINGS
#包含标准视频
结构S
char name[20];
年龄
char sex[20];
int main()
结构s={ 张三,18,男);
FILE*pf=fopen(test.txt , r );
if(pf==NULL)
佩罗尔(福彭);
返回1;
fscanf(pf, %s %d %s ,s.name,(s.age),s . sex);//读文件
printf(%s %d %s\n ,s.name,s.age,s . sex);//打印
fclose(pf);
pf=空
返回0;
}
7.二进制输出函数———写入
按二进制的方式写文件
缓冲器指向被写的数据
大小为字节数
数数为最多写多少个元素
溪流代表流
将数据的地址,字节数,元素个数传入流中
#define _CRT_SECURE_NO_WARNINGS
#包含标准视频
结构S
char name[20];
年龄
char sex[20];
int main()
结构s={ 张三,18,男);
FILE*pf=fopen(test.txt , w );
if(pf==NULL)
佩罗尔(福彭);
返回1;
fwirte( s,sizeof(struct S),1,pf);
fclose(pf);
pf=空
返回0;
}
7.二进制输入函数———弗雷德
以二进制的方式读文件
从流中读取数据的地址字节数元素个数
返回值为实际完整读取的个数
想要结束读取时看实际读取的完整个数是否小于元素个数为即将停止的临界
#define _CRT_SECURE_NO_WARNINGS
#包含标准视频
结构S
char name[20];
年龄
char sex[20];
int main()
结构s={ 张三,18,男);
FILE*pf=fopen(test.txt , r );//读文件
if(pf==NULL)
佩罗尔(福彭);
返回1;
fread( s,sizeof(struct S),1,pf);
printf(%s %d %s ,s.name,s.age,s . sex);打印
fclose(pf);
pf=空
返回0;
}
三、文件的随机读写
1.fseek
设置文件位置指示器来判断文件指针的位置和偏移量来定位文件指针
移动文件指针到特定位置
溪流代表流
抵消代表偏移量
起源代表起始位置
关于起始位置的三种状态:
搜索_当前表示从当前文件指针的位置开始偏移
寻道_结束表示从文件末尾开始偏移
SEEK_SET表示从文件的起始位置开始偏移
#define _CRT_SECURE_NO_WARNINGS
#包含标准视频
int main()
FILE*pf=fopen(text.txt , r );//这里是从已经存好数据的文件中读
if(pf==NULL)//假设文件中为爵士摇滚
佩罗尔(福彭);
返回1;
int ret=fgetc(pf);
printf(%c\n ,ret);//a
fseek(pf,-2,SEEK _ END);
ret=fgetc(pf);
printf(%c\n ,ret);//e
ret=fgetc(pf);
printf(%c\n ,ret);//f
fclose(pf);
pf=空
返回0;
这里要注意使用寻道_结束是从最后一个字符的后一个位置开始
#define _CRT_SECURE_NO_WARNINGS
#包含标准视频
int main()
FILE*pf=fopen(text.txt , r );//这里是从已经存好数据的文件中读
if(pf==NULL)//假设文件中为爵士摇滚
佩罗尔(福彭);
返回1;
int ret=fgetc(pf);
printf(%c\n ,ret);//a
fseek(pf,2,SEEK _ SET);
ret=fgetc(pf);
printf(%c\n ,ret);//c
ret=fgetc(pf);
printf(%c\n ,ret);//d
fclose(pff);
pf=空
返回0;
SEEK_SET从第一个字符开始
#define _CRT_SECURE_NO_WARNINGS
#包含标准视频
int main()
FILE*pf=fopen(text.txt , r );//这里是从已经存好数据的文件中读
if(pf==NULL)//假设文件中为爵士摇滚
佩罗尔(福彭);
返回1;
int ret=fgetc(pf);
printf(%c\n ,ret);//a
fseek(pf,2,SEEK _ CUR);//来到这里时已经指向b的流所以从b开始向后2个
ret=fgetc(pf);
printf(%c\n ,ret);//d
ret=fgetc(pf);
printf(%c\n ,ret);//e
fclose(pf);
pf=空
返回0;
}
2.ftell
福特尔返回文件指针相对起始位置的偏移量
溪流代表流
#define _CRT_SECURE_NO_WARNINGS
#包含标准视频
int main()
FILE*pf=fopen(text.txt , r );//这里是从已经存好数据的文件中读
if(pf==NULL)//假设文件中为爵士摇滚
佩罗尔(福彭);
返回1;
int ret=fgetc(pf);
printf(%c\n ,ret);//a
fseek(pf,-1,SEEK _ END);
ret=fgetc(pf);//f
printf(%c\n ,ret);//相对于起始位置的偏移量为5
fclose(pf);
pf=空
返回0;
}
3 .倒带
将文件指针位置返回到文件的开头。
#define _CRT_SECURE_NO_WARNINGS
#包含stdio.h
int main()
FILE*pf=fopen(text.txt , r );//这里是从已经存储数据的文件中读取的。
If(pf==NULL)//假设文件是abcdef
佩罗尔(‘福彭’);
返回1;
int ret=fgetc(pf);
printf(%c\n ,ret);//a
fseek(pf,-1,SEEK _ END);
倒带(pf);//文件指针回到起始位置
ret=fgetc(pf);
printf(%c\n ,ret);//a
fclose(pf);
pf=NULL
返回0;
}
四。文件阅读的判断
feof函数报告一个错误,以确定该错误通常是符合文件结尾还是无法读取。
(在函数中不用于确定是否报告错误)
Fgetc函数从流中读取字符,并在读取结束时返回EOF。
在正常情况下,返回字符的ASCII值。
Fgets函数从流中读取一个字符串,并在读取结束时返回NULL。
通常,返回字符串的起始地址。
fread函数二进制写文件返回实际读取的完整元素的数量。
结束的临界条件是:实际读取的完整元素数指定了元素数。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。