文件操作
文件操作
什么是文件
- 数据文件
- 存放程序运行时需要读取的数据
- 文件名
- 文件名包含:文件路径+文件主干+文件后缀
文件的打开和关闭
- 文件指针:指向文件地址
- 文件信息区:在内存中开辟的名为
FILE
的结构体变量(由系统声明) - 通过使用
FILE*
指针来维护FILE结构体 fopen()
函数和:
filename
:文件名
mode
:打开方式
fopen
:打开文件
fclose
:关闭文件
- 打开文件的方式
文件的读写与关闭
相关函数:
输入:指从内存中写入到硬盘
输出:指从硬盘读取到内存中
perror
():C 库函数void perror(const char \*str)
把一个描述性错误消息输出到标准错误stderr
。首先输出字符串str
,后跟一个冒号,然后是一个空格。1
2
3
4
5
6FILE* pr=fopen("chg.tet","r");
if(pr==NULL)
{
perror("fopen");
return 1;
}fputc('char',流的指针)
:写一个数据到流里面去fgetc
:当文件读取正常,返回的是字符的ASCLL
码值是个整形,读取错误(读取完成)则返回的是EOF(-1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22int main()
{
FILE* pr;
int ret;
//打开文件
pr=fopen("chg.tet","r+");
//文件的判断
if(pr==NULL)
{
perror("fopen:");
return 1;
}
//文件写入
fputs("c",pr);
//文件读取
rewind(pr);
ret=fgetc(pr);
printf("%c",ret);
//关闭文件
fclose(pr);
return 0;
}fputs
:写一个字符串fputs("chg,tsy\n",pr);
1
2
3
4
5
6
7
8. `fgets`:读一个字符串
- ```c
fgets(arr,4,pr);int main() { FILE* pr=NULL; char arr[10]; //文件的创建 pr=fopen("chg.tet","r+"); //文件的判断 if(pr==NULL) { perror("fopen:"); return 1; } //第一次文件操作 fputs("chgchg",pr); rewind(pr); fgets(arr,7,pr); printf("%s\n",arr); //第二次文件操作 rewind(pr); fputs("tsytsy",pr); rewind(pr); fgets(arr,7,pr); printf("%s\n",arr); //文件的关闭 fclose(pr); return 0; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
## 结构体数据存储
1. `fprintf()`:
```c
int main()
{
//创建文件
FILE* pr = NULL;
pr = fopen("chg.txt", "r+");
stu stu1;
scanf("%s%s", stu1.number, stu1.name);
//文件的判断
if (pr == NULL)
{
perror("fopen:");
return 1;
}
//文件的写入
fprintf(pr, "number:%s\tname:%s", stu1.number, stu1.name);
rewind(pr);
//关闭文件
fclose(pr);
return 0;
}
fscanf()
:成功返回1
1 |
|
二进制写入:
fwrite
:将buffer的东西存储进流里面
buffer
是个指针,地址size
:元素的大小,单位是字节count
:元素个数最后为流地址
typedef struct student { char number[20]; char name[10]; }stu; int main() { //文件的创建 FILE* pr = NULL; pr = fopen("chg.txt", "r+"); stu stu1; scanf("%s%s", stu1.name, stu1.number); //文件的2进制读写 fwrite(&stu1, sizeof(stu), 1, pr); //文件的关闭 fclose(pr); pr = NULL; return 0; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2. `fread`:将流里面的东西读出来![image-20221113130044448](C:\Users\12414\Desktop\C语言笔记\文件操作\文件操作.assets\image-20221113130044448.png)
```c
typedef struct student
{
char number[20];
char name[10];
}stu;
int main()
{
//文件的创建
FILE* pr = NULL;
pr = fopen("chg.txt", "r+");
stu stu1;
//文件的2进制读写
fread(&stu1,sizeof(stu1),1,pr);
printf("%s\n%s", stu1.name, stu1.number);
//文件的关闭
fclose(pr);
pr = NULL;
return 0;
}
判断文件的读取是否成功
1
feof("文件指针");//读取成功返回0,不成功返回非零值
fseek
移动文件内部的指针,达到随机访问的目的
实例:
1
2
3
4
5#include<stdio.h>
int main()
{
}
注意事项
- 遵循顺序:创建文件,文件的判断,文件的写入,文件的读取,文件的关闭,记得让指针只向空,文件写入后记得让指针恢复,再进行
文件操作
https://tsy244.github.io/2023/04/20/C/文件操作/