C语言中的变量一般是保存在内存里面,断电后数据将会不复存在,如果我们想要编写的程序将数据保存,我们需要了解一下文件的操作。
1.打开文件
假如在我们的磁盘中,有一个文件testfile.txt,现在我们在程序里面打开它。
#include"stdio.h"
#include"stdlib.h"
int main()
{
//文件指针
FILE *fp;
//打开文件的函数fopen,以写的方式打开
if((fp=fopen("testfile.txt","w"))==NULL)
{
printf("Can't open this filen");
exit(0);
}
//关闭文件的函数fclose
fclose(fp);
return 0;
}
打开之后我们需要对这个文件写入一个字符
#include"stdio.h"
#include"stdlib.h"
int main()
{
FILE *fp;
if((fp=fopen("testfile.txt","w"))==NULL)
{
printf("Can't open this filen");
exit(0);
}
char ch;
scanf("%c",&ch);
putc(ch,fp);
fclose(fp);
return 0;
}
程序执行后,我们去打开文件testfile.txt,我们可以看到,我们的文件里面有一个 c。
我们已经成功的往testfile中写入了一个字符。
现在我们从testfile中把这个字符读出来。
#include"stdio.h"
#include"stdlib.h"
int main()
{
FILE *fp;
//以读的方式打开文件
if((fp=fopen("testfile.txt","r"))==NULL)
{
printf("Can't open this filen");
exit(0);
}
char ch;
//读取这个字符
ch=getc(fp);
//打印这个字符
printf("testfile read a character %cn",ch);
fclose(fp);
return 0;
}
除了向文件中进行字符的操作,我们还可以向文件内进行字符串的操作,我们需要两个函数
fgets(str,n,fp);
fputs(str,fp);
#include"stdio.h"
#include"stdlib.h"
int main()
{
// 文件指针
FILE *fp;
// 以读写的方式打开testfile文件
if((fp=fopen("testfile.txt","r+"))==NULL)
{
printf("Can't open this filen");
exit(0);
}
// 向文件中写入helloworld字符串
fputs("hello worldn",fp);
// 关闭文件
fclose(fp);
return 0;
}
运行之后我们打开testfile文件可以看到,hellWord已经写入了。
现在我们可以把testfile中的hello world文件读取打印在终端。
#include"stdio.h"
#include"stdlib.h"
int main()
{
// 文件指针
FILE *fp;
// 以读写的方式打开testfile文件
if((fp=fopen("testfile.txt","r+"))==NULL)
{
printf("Can't open this filen");
exit(0);
}
// 定义ch数组
char ch[100];
// 向fp文件内读取一个大小为100的字符串,然后把地址给ch
fgets(ch,100,fp);
// 打印字符串
printf("%s",ch);
// 关闭文件
fclose(fp);
return 0;
}
程序运行后可以看到,字符串已经成功读取并且打印在终端上。
我们直接输入感觉好像不太完整,如果我们想要输入输出数据,我们使用简单的这些文件操作函数就不太够用了,因此我们还需要一些函数帮助我们格式化输入输出文件。
我们先来看看fprintf的使用。
#include"stdio.h"
#include"stdlib.h"
int main()
{
// 文件指针
FILE *fp;
// 以读写的方式打开已经存在的testfile文件
if((fp=fopen("testfile.txt","r+"))==NULL)
{
printf("Can't open this filen");
exit(0);
}
// 定义一个变量
int value;
// 定义一个字符串
value = 1212345;
char *ch="This is file operatingn";
// 对fp文件输出一个整形数据和一个字符串
fprintf(fp,"%d,%s",value,ch);
// 关闭文件
fclose(fp);
return 0;
}
我们还可以对文件里的数据进行输入操作。
#include"stdio.h"
#include"stdlib.h"
int main()
{
// 文件指针
FILE *fp;
// 以读写的方式打开已经存在的testfile文件
if((fp=fopen("testfile.txt","r+"))==NULL)
{
printf("Can't open this filen");
exit(0);
}
// 定义一个整形变量
int value ;
// 定义一个字符数组
char ch[100];
// 对testfile文件进行输入,输入的值给value,字符串给ch
fscanf(fp,"%d,%s",&value,&ch);
// 在终端打印
printf("%dn%sn",value,ch);
// 关闭文件
fclose(fp);
return 0;
}
我们还可以使用二进制写入文件,这样系统就不需要直接转换,直接写入二进制。
#include"stdio.h"
#include"stdlib.h"
int main()
{
// 文件指针
FILE *fp;
// 以写的方式打开已经存在的testfile文件
if((fp=fopen("testfile.data","wb"))==NULL)
{
printf("Can't open this filen");
exit(0);
}
//写入整形变量a
int a=1234;
fwrite(&a,sizeof(int),1,fp);
// 关闭文件
fclose(fp);
return 0;
}
程序执行完成后,我们再打开testfile.data文件使用fread读取数据然后输出在终端查看是否写入正确。
#include"stdio.h"
#include"stdlib.h"
int main()
{
// 文件指针
FILE *fp;
// 以读的方式打开已经存在的testfile文件
if((fp=fopen("testfile.data","rb"))==NULL)
{
printf("Can't open this filen");
exit(0);
}
//读取testfile.data文件的数据并且打印在屏幕上
int *p;
fread(p,sizeof(int),1,fp);
printf("%dn",*p);
// 关闭文件
fclose(fp);
return 0;
}
现在我们已经成功的使用二进制文件进行读写。
我们还可以对我们想要进行读写的文件的任意位置进行读写。
首先我们先要有一个文件有一点东西。
#include"stdio.h"
#include"stdlib.h"
int main()
{
FILE *fp;
fp=fopen("testfile.txt","w+");
char *ch="This is windstormn";
fputs(ch,fp);
return 0;
}
文件创建完成之后,我们就对这个文件里面的第8个字符开始读取。
#include"stdio.h"
#include"stdlib.h"
int main()
{
FILE *fp;
fp=fopen("testfile.txt","r+");
fseek(fp,7,SEEK_SET);
char ch[100];
fgets(ch,100,fp);
printf("%sn",ch);
fclose(fp);
return 0;
}
以上就是文件操作的所有内容,如果觉得好不错,点个赞支持一下,如果有不同的看法,请在评论区留言,如果以上内容有错误,欢迎大家批评指正一下,O(∩_∩)O谢谢。



