目录
文件操作概念
通过代码实现对文件的操作,读写创建删除以及对文件内容的操作
读文件:从磁盘上的文件中读取到计算机内存中
写文件:从计算机内存中的内容写入到文件中
我们的数据都是存放在内存条中,内存条是掉电容易丢失设备,而我们的固态,机械等硬盘设备是掉电不丢失设备.所以我们要学习文件操作,将数据写入到硬盘中。
函数名 | 功能 |
---|---|
fopen | 打开文件,模式:只读,只写,可读可写,追加 |
fclose | 关闭文件 |
------------ 按块操作 ----------- | |
fread | 读取文件中一块数据 |
fwrite | 写入一块数据到文件中 |
----------- 格式化操作 ------- | |
fscanf | 格式化读取文件数据到内存 |
fprintf | 格式化写入数据到文件中 |
----------- 字符操作 ----------- | |
fputc | 向文件流写入一字节数据 |
fgetc | 读取文件一字节数据 |
----------- 按行操作 ------------ | |
fputs | 向文件流写入一行数据 |
fgets | 读取文件流一行数据 |
---------- 文件指针操作 ---------- | |
feof | 测试给定流 stream 的文件结束标识符 |
fflush | 刷新流 stream 的输出缓冲区 |
fseek | 设置流 stream 的文件位置为给定的偏移 offset,参数 offset 意味着从给定的 whence 位置查找的字节数 |
---------- 文件属性 ---------------- | |
remove | 删除给定的文件名 filename,以便它不再被访问 |
rename | 重名给定的文件 |
一、文件操作四个步骤?
1、打开文件
函数:fopen
#include <stdio.h> FILE *fopen(const char *filename, const char *mode) |
参数:fname 需要打开或者创建的文件路径,默认是当前目录下,也是字符串
mode:打开或者创建的模式,是字符串
返回值
该函数返回一个 FILE 指针。否则返回 NULL,且设置全局变量 errno 来标识错误。
Mode(方式) | 意义 |
"r" | 打开一个用于读取的文本文件 |
"w" | 创建一个用于写入的文本文件 |
"a" | 附加到一个文本文件 |
"rb" | 打开一个用于读取的二进制文件 |
"wb" | 创建一个用于写入的二进制文件 |
"ab" | 附加到一个二进制文件 |
"r+" | 打开一个用于读/写的文本文件 |
"w+" | 创建一个用于读/写的文本文件 |
"a+" | 打开一个用于读/写的文本文件 |
"rb+" | 打开一个用于读/写的二进制文件 |
"wb+" | 创建一个用于读/写的二进制文件 |
"ab+" | 打开一个用于读/写的二进制文件 |
#include <stdio.h>
int main()
{
FILE *fp;
fp = fopen ("file.txt","w+");//创建一个用于读写的文本文件
fprintf(fp,"%d %s",2022,"07");//向文件中写2022 07
fclose(fp);//关闭文件
return 0;
}
2、读写文件
函数:fgets fputs fgetc fputc fscanf fprintf fread fwrite
函数:fgets
char *fgets(char *str, int n, FILE *stream)
参数:
str---->数组
n ----->数组长度
stream-->文件或stdin(输入流,从终端中输入)
从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。
返回值
如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。
如果发生错误,返回一个空指针。
#include <stdio.h>
int main()
{
FILE *fp;
char str[60];
fp = fopen("file.txt","r");//打开文件
if(fp == NULL)
{
perror("打开文件时错误:");
return(-1);
}
if(fgets(str,60,fp) != NULL)//从文件中读取内容到数组中
{
puts(str);
}
fclose(fp);
return 0;
}
当文件不存在时:
当文件存在而且有内容时:
函数:fputs
int fputs(const char *str, FILE *stream)
把字符串写入到指定的流 stream 中,但不包括空字符。
参数:
str ------>数组
stream--->文件或stdout(输出流,从终端中输出)
返回值
该函数返回一个非负值,如果发生错误则返回 EOF。
#include <stdio.h>
int main()
{
FILE *fp;
fp = fopen("file.txt","w+");
fputs("2022年",fp);
fputs("7月",fp);
fclose(fp);
return 0;
}
运行后会创建file.txt文件
内容:2022年7月
3、文件偏移
函数:ftell fseek rewind
函数名:int fseek(FILE *stream,long int offset,int whence)
whence 常量 | 描述 |
SEEK_SET | 文件的开头 |
SEEK_CUR | 文件指针的当前位置 |
SEEK_END | 文件的末尾 |
如:fseek(fp,0,SEEK_SET) 从开头第一个字节开始<==>rewind(fp);
如果成功,则该函数返回零,否则返回非零值。
4、关闭文件
函数名:int fclose( FILE *fp ) 关闭文件流对象(文件句柄)
该方法返回零。如果失败,则返回 EOF。
如:fclose(fp)
总结
C语言文件操作主要就是一些函数的灵活使用,下面会提供一些常用的文件操作相关的函数。