计算机二级复习之文件操作

博主正在准备考二级C语言但是最怕的就是遇到文件操作相关的题,真的是太难了,为了那些和我一起考二级的小伙伴我更新这期C语言文件操作的相关资料
文件的打开与关闭

在打开文件之前我们需要先创建一个文件指针 FILE *fp;,用来记录地址。

文件打开函数为 fopen(文件名,使用文件方式),例如 fopen(“D:\t.txt”,“w+”)。
文件名:是一串字符串,文件在你的电脑中储存的位置路径例如:D:\t.txt, 因为 \ 符号是转义符号,因此我们写的路径时要写成 D:\t.txt,当然也可以写成 D:/t.txt
使用文件方式:

r:以只读方式打开文件,该文件必须存在。
r+:以读写方式打开文件,该文件必须存在。
rb+:以读写方式打开一个二进制文件,只允许读写数据。
rt+:以读写方式打开一个文本文件,允许读和写。
w:打开只写文件,若文件存在则文件长度清为零,即该文件内容会消失:若文件不存在则创建该文件。
w+:打开可读(写文件,若文件存在则文件长度清为零,即该文件内容会消失:若文件不存在则创建该文件。
a:以附加的方式打开只写文件。若文件不存在,则会创建该文件:如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(EOF 符保留)。
a+:以附加方式打开可读写的文件。若文件不存在,则会创建该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(EOF符不保留)。
wb:以只写方式打开或新建一一个二进制文件,只允许写数据。
wb+:以读/写方式打开或新建一个二进制文件,允许读和写。
wt+:以读写方式打开或新建一个文本文件,允许读和写。
at+:以读写方式打开-个文本文件,允许读或在文本末追加数据。
ab+:以读写方式打开- -个二进制文件,允许读或在文件末追加数据。

文件关闭函数 fclose(fp), 其中 fp 为文件指针。
文件读写操作

fgetc 从文件中读取一个字符
格式为:fgetc (fp) fp 为文件指针,每次读取后自动向后挪动。成功返回字符,失败返回 EOF

fputc 写一个字符到文件中去
格式为:fputc (c,fp) c 是个字符变量或字符,fp 为文件指针。

fgets 从文件中读取一个字符串
格式为:fgets (s,n,fp) s 为字符串指针(数组名),n 为最大读取多少字符,fp 为文件指针。
原型为 char *fgets (char *str, int n, FILE *stream)

fputs 写一个字符串到文件中去。
格式为:fputs (s,fp) s 为字符串指针(数组名),fp 为文件指针。
int fputs(const char *str, FILE *stream)

fprintf 往文件中写格式化数据
涉及到格式控制点击到介绍页面:点击直达
fs­canf 格式化读取文件中数据
涉及到格式控制点击到介绍页面:点击直达
如果 fprintf 和 fs­canf 进行搭配时,如果不想以空格或换行为分割点,例如采用:, 为分隔符,那么可以采用 %[^,], 的形式来读取。
具体方法可以访问:点击访问

fread 以二进制形式读取文件中的数据
格式为:fread (s,n,m,fp) s 为字符串指针(数组名),n 为一次读取多少字符,m 为读取多少次,fp 为文件指针。
原型为:size_t fread (void *ptr, size_t size, size_t nmemb, FILE *stream)

fwrite 以二进制形式写数据到文件中去
格式为:fwrite (s,n,m,fp) s 为字符串指针(数组名),n 为一次写入多少字符,m 为写入多少次,fp 为文件指针。
原型为:size_t fwrite (const void *ptr, size_t size, size_t nmemb, FILE *stream)
(所有形式在百度或谷歌一搜就出现具体格式,推荐菜鸟教程)
文件检查和定位

文件状态检查函数
feof 文件是否结束(结束返回非 0,没结束返回 0)

fer­ror 检查文件读 / 写出错

clear­err 清除文件错误标志

ftell 了解文件指针的当前位置(函数 ftell 用于得到文件位置指针当前位置相对于文件首的偏移字节数)

文件定位函数 rewind 反绕(让文件指针回到文件开始地址)
fseek 随机定位,具体解释如

int fseek( FILE *stream, long off­set, int ori­gin );
第一个参数stream为文件指针
第二个参数off­set为偏移量,正数表示正向偏移,负数表示负向偏移
第三个参数ori­gin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2.
简言之:
fseek(fp,100L,0);把stream指针移动到离文件开头100字节处;
fseek(fp,100L,1);把stream指针移动到离文件当前位置100字节处;
fseek(fp,-100L,2);把stream指针退回到离文件结尾100字节处。

代码实例

#include<stdlib.h>
#include<string>

void fputc_fgetc()
{
FILE *fp;
int i;
char c;
printf(“我是fputc_fgetc函数\n”);
if((fp=fopen(“fputc_fgetc.txt”, “w+))==NULL)
{
printf(“fputc_fgetc函数失败了”);
exit(1);
}
while((c=getchar())!=‘#’)
fputc(c,fp);
fputc(‘\0,fp);
rewind(fp);//让指针回到开头
while((c=fgetc(fp))!=‘\0)
printf(%c”,c);
fclose(fp);
printf(“\nfputc_fgetc函数结束了\n”);
}
void fputs_fgets()
{
while (getchar() != ‘\n’);//清空缓冲区
char c[100]={‘\0},s[100]={‘\0};
FILE *fp;
int i,j;
printf(“我是fputs_fgets函数\n\n”);
if((fp=fopen(“fputs_fgets.txt”, “w+))==NULL)
{
printf(“fputs_fgets失败了”);
exit(1);
}
for(i=0;(c[i]=getchar())!=‘#’;i++);
c[i]=‘\0;
fputs(c,fp);//将c所指的字符串传递给fp文件指针
rewind(fp);//让指针回到开头
fgets(s,100,fp);//将fp文件指针所指的字符串读出100位赋值给s指针
printf(%s”,s);
fclose(fp);
printf(“\nfputs_fgets函数结束了\n\n”);
}
void fread_fwrite()
{
while (getchar() != ‘\n’);//清空缓冲区
char c[100]={‘\0},s[100]={‘\0};
FILE *fp;
int i,j;
printf(“我是fread_fwrite函数\n\n”);
if((fp=fopen(“fread_fwrite.txt”, “w+))==NULL)
{
printf(“fputs_fgets失败了”);
exit(1);
}
for(i=0;(c[i]=getchar())!=‘#’;i++);
c[i]=‘\0;
fwrite(c,(strlen(c)+1),1,fp);
rewind(fp);//让指针回到开头
fread(s,1,(strlen(c)+1),fp);//将fp文件指针所指的字符串读出100位赋值给s指针
printf(%s”,s);
fclose(fp);
printf(“\nfread_fwrite函数结束了\n\n”);
}
void fprintf_fscanf()
{
while (getchar() != ‘\n’);//清空缓冲区
char c[100]={‘\0},s[100]={‘\0};
FILE *fp;
int i,j;
printf(“我是fprintf_fscanf函数\n\n”);
if((fp=fopen(“fprintf_fscanf.txt”, “w+))==NULL)
{
printf(“fprintf_fscanf失败了”);
exit(1);
}
for(i=0;(c[i]=getchar())!=‘#’;i++);
c[i]=‘\0;
while (getchar() != ‘\n’);//清空缓冲区
for(i=0;(s[i]=getchar())!=‘#’;i++);
s[i]=‘\0;
while (getchar() != ‘\n’);//清空缓冲区
fprintf(fp,%s %s\n”,c,s);
rewind(fp);//让指针回到开头
fscanf(fp,%s %s\n”,s,c);
fclose(fp);
printf(%s\n”,c);
printf(%s\n”,s);
printf(“\nfprintf_fscanf函数结束了\n\n”);
}
void main()
{
fputc_fgetc();
fputs_fgets();
fread_fwrite();
fprintf_fscanf();
}

(代码仅仅针对各种输出和输入写了函数,其他的实例可以自行尝试。)

猜你喜欢

转载自blog.csdn.net/qq_43581670/article/details/107605457
今日推荐