当前位置:   article > 正文

C语言——文件操作及常见问题_c语言文件读写会出现的问题有哪些

c语言文件读写会出现的问题有哪些

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

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

一、文件指针的创建

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

FILE *fp;
  • 1

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

二、fopen的使用

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

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

使用文件指针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("关闭失败");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

四、fwrite的使用

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

首先定义一个结构体:

struct text{
     char text[20]="0";
};
  • 1
  • 2
  • 3

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

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

五、fread的使用

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

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

六、remove的使用

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

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

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

七、rename的使用

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

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

常见错误

1、程序中断

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

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

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

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

char text[20]="0";
  • 1

3、remove和rename失败

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/789595
推荐阅读
相关标签
  

闽ICP备14008679号