C语言文件操作
什么是文件:
我们对文件的概念已经非常熟悉了,比如常见的 Word 文档、txt 文件、源文件等。文件是数据源的一种,最主要的作用是保存数据。
文件操作:
操作文件的正确流程为:打开文件 --> 读写文件 --> 关闭文件。文件在进行读写操作之前要先打开,使用完毕要关闭。
编程操作 :
FILE *file; //定义FILE结构体指针变量,这个指针指向的FILE结构体的内存空间是系统自动分配的.
file = fopen(“文件路径”,“文件打开方式”); 打开使用完过后记得关闭fclose(文件指针);
返回值 : 执行成功返回FILE结构体指针,出错返回NULL.
注意:一般是不会同时进行写入和读取
打开方式 | 描述 |
---|---|
“r” | 以只读方式打开文件,文件必须存在. |
“r+” | 以可读写的方式打开文件,文件必须存在. |
“w” | 以只写方式打开文件,文件不存在则创建;文件存在则擦除文件中的内容. |
“w+” | 以可读写的方式打开文件,文件不存在则创建;文件存在则擦除文件中的内容. |
“a” | 以只写方式打开文件,文件不存在则创建;文件存在则新内容从文件内容末尾开始写入. |
“a+” | 以可读写方式打开文件,文件不存在则创建,文件存在则新内容从文件内容末尾开始写入. |
文件操作基本函数说明
fputc:
fputc('字符',文件指针);向文件中输入一个字符
char c='Y'; fputc(c,file);
fgetc:
fgetc(文件指针);从文件中获取一个字符
fgetc(file);这个函数有一个返回值,可以用变量去接受,也可以直接输出
fputs:
fputs("字符串",文件指针);向文件中输入一串字符
char s[100]="asdf";fputc(s,file);
fgets:
fgets(字符数组,要读取字符的大小,文件指针);获取一个字符串
char s[100]; fgets(s,100,file);这样就把文件里面的字符串赋值给了字符数组s
fprintf:
fprintf(文件指针,"格式占位符",变量名);向文件中写入格式化的数据
typedef struct student
{
int id;
char name[20];
}STU;//定义结构体
STU stu[3] = { 1, "asd", 2, "qwe", 3, "zxc" };//结构体数组
for (int i = 0; i < 3; i++)
{
fprintf(file, "id是:%d name是:%s\n", stu[i].id, stu[i].name);//格式化写入到文本里面
}
fscanf:
fscanf(文件指针,"格式占位符",变量);//从文件中获取格式化的数据
STU stu[3] = { 0 };//定义结构体数组来保存从文件读取到的元素
for (int i = 0; i < 3; i++)//从文本里面读取到结构体数组里面
{
fscanf(file, "id是:%d name是:%s\n", &stu[i].id, stu[i].name);
}
for (int i = 0; i < 3; i++)//输出
{
printf("id是:%d name是:%s\n", stu[i].id, stu[i].name);
}
fseek:
fseek(file,偏移量,位置(SEEK_END);//偏移量是正数就是往后移动,是负数就是往前移动
位置描述符 | 描述 |
---|---|
SEEK_CUR | 文件内部指针当前位置 |
SEEK_END | 表示文件末尾 |
SEEK_SET | 文件开头 |
fseek(file, 2, SEEK_CUR);//文件指针从当前的位置往后面移动了两个单位
ftell:
int off=ftell(fp);得到文件内部指针相对于文件(从文件开头的位置)的偏移量
EOF:
EOF 文件末尾的标志
char c;
while((c=fgetc(file))!=EOF)//这样循环用来判断是否读到文件末尾
frewind:
rewind(fp);//将文件内部指针移回文件开头
fwrite:
fwrite(需要写进去字符数组, 数据类型的大小,数据的个数, 文件指针);向文件中写入数据
fread:
fread(用来保存的字符数组,数据类型的大小,数据的个数,文件指针);从文件中获取格式化的数据
特别提醒:操作完之后记得关闭文件
fclose(文件指针)