既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
FILE*p//文件类型指针
可以使pf指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够找到与它关联的文件。
三、文件操作函数
①fopen 与 fclose
1.fopen
<功能>打开文件
<参数> filename-文件名 mode-打开方式
<返回值>一个文件指针
(打开方式mode表)
2.fclose
<功能> 关闭文件
<参数> stream-文件指针
3.使用示范
#include<stdio.h>
#include<sting.h>
#include<errno.h>
int main()
{
FILE*pw = fopen("test.txt","w");//打开的文件为“test.txt” 打开方式为“w”
if(pw==NULL)//若打开失败则说明失败原因并结束进程
{
printf("%s",strerror(errno));//errno是全局错误变量 strerror将errno解析为错误原因
return 0;
}
fclose(pw);//关闭文件
pw = NULL;//将指针置为空,防止被误用
return 0;
}
文件名相对/绝对路径
绝对路径:如c:\code\test.txt 包含文件路径 文件主干 文件后缀
相对路径:上图的表示就是相对路径,表示txt文件与源文件在同一路径下,若要表示上一路 径,则用“…/”,一次类推上上路径就是“…/…/”
FILE*pw = fopen("../test.txt","w");
②fputc与fgetc
1.fputc——输出函数
<功能>将一个字符写入流中
<参数>c-输出的字符
<返回值>正常——返回输出的字符
错误——返回EOF
<适用>所有流
2.fgetc——输入函数
<功能>从流中读取一个字符
<返回值>int——返回输入的字符
EOF——发生错误或到达文件结尾
<适用>所有流
3.使用示范
#include <stdio.h>
#include <string.h>
#include<errno.h>
//fputc 输出一个字母
int main()
{
FILE*pw = fopen("test.txt","w");
if (pw == NULL)
{
printf("%s",strerror(errno));
return 0;
}
fputc('b',pw);//将字符‘b’写入文件"test.txt"
fclose(pw);
pw = NULL;
return 0;
}
//fgetc 读取一个字符,读取一个后文件指针往后偏移一位
int main()
{
FILE*pr = fopen("test.txt","r");
if (pr == NULL)
{
printf("%s",strerror(errno));
return 0;
}
char ch = 0;//用ch接收输入的字符
ch = fgetc(pr);//从文件"test.txt"中读取,读取一个字符后文件指针自动往后移一位
fclose(pr);
pr = NULL;
printf("%c",ch);
return 0;
}
4.对所有流的理解
什么是流:流是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存 向外部输出设备(显示器)输出的过程。
上述代码演示的是对文件流的操作,我们在用标准输入(stdin)输出(stdout)流演示一下
③fputs与fgets
1.fputs——输出函数
<功能>将字符串写入流中
<返回值>int——非负值表示成功
EOF——发生错误
<适用>所有流
2.fgets——输入函数
<功能>从流中获取字符串
<返回值>正常——返回字符串
NULL——表示错误或者到达文件结尾
<参数>n-从流中读取的最大字符数(\0会自动占去一位)
3.使用示范
#include <stdio.h>
#include <string.h>
#include<errno.h>
//fputs
int main()
{
FILE*pw = fopen("test.txt","w");
if (pw == NULL)
{
printf("%s",strerror(errno));
return 0;
}
char ch[5] = "abcd";
fputs(ch,pw);
fclose(pw);
pw = NULL;
return 0;
}
//fgets
int main()
{
FILE*pr = fopen("test.txt","r");
if (pr == NULL)
{
printf("%s",strerror(errno));
return 0;
}
char ch[5] = {0};
fgets(ch,3,pr);//有一位自动被\0占用
printf("%s",ch);
return 0;
}
④fprintf与fscanf
1.fprintf——输出函数
<功能>将特定格式的数据写入流中
<返回值>返回打印的字节数。
<适用>所有流
<对比>printf默认将数据打印在标准输出流(stdout)上,而fprintf的输出流可以选择。printf 打印的字符数返回
2.fscanf——输入函数
<功能>从流中读取特定格式的数据
<适用>所有流
<返回值>返回成功转换和分配的字段数量
3.使用示范
//头文件同上略
//fprintf
int main()
{
FILE*pw = fopen("test.txt","w");
if (pw == NULL)
{
printf("%s",strerror(errno));
return 0;
}
fprintf(pw,"%d %.2f %c",10,3.14,'a');
fclose(pw);
pw = NULL;
return 0;
}
//fscanf
int main()
{
int a; float b; char c;
FILE*pr = fopen("test.txt","r");
if (pr == NULL)
{
printf("%s",strerror(errno));
return 0;
}
fscanf(pr,"%d %f %c",&a,&b,&c);
printf("%d %.2f %c", a,b,c);
return 0;
}
⑤fwrite与fread
1.fwrite——输出函数
<功能>将数据以二进制的形式写入文件流中
<参数>buffer-指向写入数据的指针 size-每一个元素的大小 count-写入的最大元素数
<返回值>实际写入的元素数
<适用>文件流
2.fread——输入函数
<功能>将数据以二进制的形式从文件流中读取
<返回值>实际读入的元素数
<适用>文件流
3.使用示范
//头文件同上略
//fwrite fread
typedef struct stu
{
int n;
float score;
char name[10];
}stu;
int main()
{
stu s = {10,100.0,"张三"};
FILE*pr = fopen("test.txt","rb");
struct stu s1 = { 0 };
if (pr == NULL)
{
printf("%s",strerror(errno));
return 0;
}
//fwrite(&s,sizeof(stu),1,pw);
fread(&s1,sizeof(stu),1,pr);
fclose(pr);
pr = NULL;
return 0;
}
⑥fseek与ftell与rewind
1.fseek
<功能>将文件指针移到指定的位置
<参数>offset-偏移量 origin-初始化文件指针位置
origin有三种选择:SEEK_CUR 从当前位置开始
SEEK_END 从文件结尾开始
SEEK_SET从文件开头开始
<返回值>成功返回0,失败返回非0值
<注意>对文件指针的修改不可以通过p++的方式实先
使用演示(现已知记事本储存数据为“abcdef”)
//fseek
int main()
{
FILE*pr = fopen("test.txt","r");
int a = 0;
if (pr == NULL)
{
printf("%s",strerror(errno));
return 0;
}
//定位文件指针
fseek(pr, -1, SEEK_END);//指向最后一个的后一个
a=fgetc(pr);
b=ftell(pr);//返回当前指针位置
printf("%c",a);
printf("%d",b);
fclose(pr);
pr = NULL;
return 0;
}
(若初始化文件指针为SEEK_SET,偏移1则得到b)
2.ftell
<功能>返回当前文件指针的偏移量
3.rewind
<功能>使文件指针回到文件的开始
使用演示
int main()
{
int n;
FILE * pFile;
char buffer[27];
pFile = fopen("test.txt", "w+");
for (n = 'A'; n <= 'Z'; n++)
fputc(n, pFile);
rewind(pFile);
fread(buffer, 1, 26, pFile);
fclose(pFile);
buffer[26] = '\0';
puts(buffer);
return 0;
}
⑦ferror与feof
1.ferror
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
File;
char buffer[27];
pFile = fopen(“test.txt”, “w+”);
for (n = ‘A’; n <= ‘Z’; n++)
fputc(n, pFile);
rewind(pFile);
fread(buffer, 1, 26, pFile);
fclose(pFile);
buffer[26] = ‘\0’;
puts(buffer);
return 0;
}
### ⑦ferror与feof
1.ferror
[外链图片转存中...(img-EPV9nR99-1715590960614)]
[外链图片转存中...(img-H2Smx3cN-1715590960614)]
[外链图片转存中...(img-WDz7QQGp-1715590960614)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**