C语言——文件操作及常见问题

C语言——文件基本操作及常见问题

当我们需要永久储存一些变量的时候,由于进程关闭后,会清空对应内存区域,所以我们需要把这一些数据写入外存中。

一、文件指针的创建

创建一个文件,首先现需要用指针指向文件。

FILE *fp;

FILE是定义指针类型,fp是指针名。

二、fopen的使用

创建完文件指针,现在就需要打开文件进行操作,这里使用fopen函数进行操作。

fp = fopen("test.txt","w");

使用文件指针fp,打开test.txt文件,并将权限设置为覆写。
其中fopen中基本属性分别有:
r:只读
w:覆写。删除原来文件,再次写入。
a:追加
r+:读写
a+:a和r+的相加效果
w+:w和r+的相加效果

三、fclose的使用

打开文件进行操作了后,需要安全关闭文件才能保存操作内容。在不使用文件之后,使用fclose函数进行关闭。fclose的返回值,成功关闭是0,失败是EOF (-1)。

if(fclose(fp)==0){
   printf("安全关闭");
}
else{
   printf("关闭失败");
}

四、fwrite的使用

对文件内容进行操作的时候,使用fwrite写入,这里用结构体为例。

首先定义一个结构体:

struct text{
     char text[20]="0";
};

随后在程序中关联结构体,再使用fwrite函数

//text结构体命名为temp
struct text temp;
fwrite(&temp,sizeof(struct test),1,fp)

五、fread的使用

fread和fwrite的语法一致,返回值,有数据返回1

//文件读取
while((fread(&temp,sizeof(struct test),1,fp)==1){
       printf("%s",temp.test);
}

六、remove的使用

删除文件的时候,使用remove函数。remove函数需要写绝对地址,或者宏定义一个文件。remove的成功返回值为0,失败为-1

if(remove(".\\test.txt")==0){
  printf("删除成功");
}
else{
  perror("File cannot be deleted,because:");
}

使用perror函数打印出失败原因,便于问题查找。

七、rename的使用

除了可以删除文件,还可以使用rename函数对文件改名,第一个变量为要改的名字,第二个为新名字

rename("test.txt","bingo.txt");

常见错误

1、程序中断

程序中断可能是由于,首次打开文件的时候,没有目标文件的存在而导致中断。
解决办法:先判断是否有文件,如果没有,创立文件再打开

if ((fp = fopen("test.txt", "a")) == NULL){
	fp = fopen("test.txt", "w");
}

2、存入文件出现“烫烫烫”

此类错误,要么是数组的容量太小,导致溢出,要么就是数组没有初始化导致。因此只需要在结构体里,调整数组大小和初始化即可。

char text[20]="0";

3、remove和rename失败

失败后,使用perror提示出的问题多为Permission denied。
Step1:需要把权限打开,Linux打开777,Windows打开完全控制
Step2:检查文件是否真实存在
Step3:查看是否有fopen未关闭。此处的关闭,需要一个fopen对应一个fclose,且不可以两个fopen对应一个fclose,因为此种方式只能关闭一个文件和一个句柄,但在两个fopen的时候,打开了一个文件和两个句柄。因此还有一个句柄存在,导致文件无法使用 (目前此问题仅发现于win11)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃柠檬的天天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值