一、文件的定义
磁盘上的文件是文件。
(一)程序文件
- 源文件:.c
- 目标文件:.obj
- 可执行程序:.exe
(二)数据文件
这节说明的就是从磁盘上把数据读取到内存中使用。
(三)文件名
绝对路径:C:\\code\\test.text
,以文件路径+文件名主干+文件后缀。
相对路径:..\\..\\test.c
,其中..\\
代表当前路径的上一路径。
二、文件操作
(一)文件指针
每打开一个文件,系统会根据文件情况自动创建一个FILE结构的变量,并填充其中信息。通过文件指针变量能找到与它相关联的文件,这个结构体可以理解成流。
C语言默认打开的流有三种:stdout, stdin, stderror。
(二)文件的打开和关闭
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
FILE* pfile = fopen("data.text","w");
if (pfile == NULL)
{
perror("fopen");
}
else
{
fputs("ppp", pfile);
fclose(pfile);
pfile = NULL;
}
return 0;
}
- “r”:只读、为了输入数据,打开一个已经存在的文本文件,文件不存在会出错。
- “w”:只写,为了输出数据,打开一个文本文件,文件不存在会新建一个文件。
- “a”:追加,向文本文件尾添加数据,文件不存在会新建一个文件。
(三)文件的顺序读写
fgetc()
int main()
{
FILE* pfile = fopen("data.text","r");
if (pfile == NULL)
{
perror("fopen");
}
else
{
putc(fgetc(pfile),stdout);
fclose(pfile);
pfile = NULL;
}
return 0;
}
fputc
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
FILE* pfile = fopen("data.text","w");
if (pfile == NULL)
{
perror("fopen");
}
else
{
fputc('c',pfile);
fputc('a', pfile);
fputc('b', pfile);
fclose(pfile);
pfile = NULL;
}
return 0;
}
注意:每写入一个字符,光标会向后移一位。
fputs
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
FILE* pfile = fopen("data.text","w");
if (pfile == NULL)
{
perror("fopen");
}
else
{
char* arr = "abcde";
fputs(arr,pfile);
fclose(pfile);
pfile = NULL;
}
return 0;
}
fgets
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
FILE* pfile = fopen("data.text","r");
if (pfile == NULL)
{
perror("fopen");
}
else
{
char arr[30] = {0};
fgets(arr,3,pfile);
puts(arr);
fclose(pfile);
pfile = NULL;
}
return 0;
}
注意:只读取n-1个字符。
fscanf
fprintf
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
typedef struct stu
{
char name[20];
char sex[20];
int age;
}Stu;
int main()
{
Stu student = {"wang","man",10};
FILE* pfile = fopen("data.text","r");
if (pfile == NULL)
{
perror("fopen");
}
else
{
/*fprintf(pfile,"%s - %s - %d", student.name, student.sex, student.age);*/
fscanf(pfile, "%s - %s - %d", student.name, student.sex, &student.age);
printf("%s - %s - %d", student.name, student.sex, student.age);
fclose(pfile);
pfile = NULL;
}
return 0;
}