赞
踩
当我们需要永久储存一些变量的时候,由于进程关闭后,会清空对应内存区域,所以我们需要把这一些数据写入外存中。
创建一个文件,首先现需要用指针指向文件。
FILE *fp;
FILE是定义指针类型,fp是指针名。
创建完文件指针,现在就需要打开文件进行操作,这里使用fopen函数进行操作。
fp = fopen("test.txt","w");
使用文件指针fp,打开test.txt文件,并将权限设置为覆写。
其中fopen中基本属性分别有:
r:只读
w:覆写。删除原来文件,再次写入。
a:追加
r+:读写
a+:a和r+的相加效果
w+:w和r+的相加效果
打开文件进行操作了后,需要安全关闭文件才能保存操作内容。在不使用文件之后,使用fclose函数进行关闭。fclose的返回值,成功关闭是0,失败是EOF (-1)。
if(fclose(fp)==0){
printf("安全关闭");
}
else{
printf("关闭失败");
}
对文件内容进行操作的时候,使用fwrite写入,这里用结构体为例。
首先定义一个结构体:
struct text{
char text[20]="0";
};
随后在程序中关联结构体,再使用fwrite函数
//text结构体命名为temp
struct text temp;
fwrite(&temp,sizeof(struct test),1,fp)
fread和fwrite的语法一致,返回值,有数据返回1
//文件读取
while((fread(&temp,sizeof(struct test),1,fp)==1){
printf("%s",temp.test);
}
删除文件的时候,使用remove函数。remove函数需要写绝对地址,或者宏定义一个文件。remove的成功返回值为0,失败为-1
if(remove(".\\test.txt")==0){
printf("删除成功");
}
else{
perror("File cannot be deleted,because:");
}
使用perror函数打印出失败原因,便于问题查找。
除了可以删除文件,还可以使用rename函数对文件改名,第一个变量为要改的名字,第二个为新名字
rename("test.txt","bingo.txt");
程序中断可能是由于,首次打开文件的时候,没有目标文件的存在而导致中断。
解决办法:先判断是否有文件,如果没有,创立文件再打开
if ((fp = fopen("test.txt", "a")) == NULL){
fp = fopen("test.txt", "w");
}
此类错误,要么是数组的容量太小,导致溢出,要么就是数组没有初始化导致。因此只需要在结构体里,调整数组大小和初始化即可。
char text[20]="0";
失败后,使用perror提示出的问题多为Permission denied。
Step1:需要把权限打开,Linux打开777,Windows打开完全控制
Step2:检查文件是否真实存在
Step3:查看是否有fopen未关闭。此处的关闭,需要一个fopen对应一个fclose,且不可以两个fopen对应一个fclose,因为此种方式只能关闭一个文件和一个句柄,但在两个fopen的时候,打开了一个文件和两个句柄。因此还有一个句柄存在,导致文件无法使用 (目前此问题仅发现于win11)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。