C语言文件操作函数详解


想了解C语言文件定义等相关知识请查看我的另一篇博客: C语言文件详解

一、定义一个指向文件(FILE类型数据)的指针

FILE *fp;

在这里插入图片描述

指向文件的指针变量并不是指向外部介质上的数据文件的开头,而是指向内存中的文件信息区的开头。

二、打开关闭文件

1.打 开文件fopen

一般都指定一个指针变量指向该文件,也就是建立起指针变量与文件之间的联系。

  • 使用fopen打开数据文件
FILE *fp;				//定义一个指向文件的指针变量fp
fp=fopen("a","r";	//以只读方式打开一个叫做a的文件
  • 打开文件常用方法:
if(fp=fopen("file1","r")==NULL)		//如果打开出错
{
    
    
	printf("cannot open this file");
	exit(0);
}

fopen要点:
(1)需要打开文件的名字,如上面的a
(2) 使用文件的方式(“读”还是“写”等)
(3)一个文件指针,用来标识该文件

文件使用方式

2.关闭文件fclose

“关闭”,就是使文件指针变量不再指向该文件。

fclose(fp);

fclose成功地执行了关闭操作,则返回值为0;否则返回EOF(-1)。
在使用完一个文件后应该关闭它,以防止它再被误用
如果不关闭文件就结束程序运行将可能会丢失数据。

三、顺序读写数据文件

1.从文件读一个字符fgetc
fgetc(fp)//成功,返回所读字符;失败,返回,返回文件结束标志:EOF(即-1)
2.向文件写一个字符fputc
fputc(ch,fp)//成功,返回输出字符;失败,返回EOF(即-1)
示例:

1.从键盘输入一些字符,并逐个把它们送到磁盘上去,直到用户输入一个“!”为止

2.将一个磁盘文件中的信息复制到另一个磁盘文件中。要求将建立的file1.dat文件中的内容复制到另一个磁盘文件file2.dat中。

3.从文件读字符串fgets

从fp指向的文件读入一个长度为(n-1)的字符串,存放到字符数组str中

fgets(str,n,fp);		//读成功,返回地址str,失败则返回NULL
//函数原型:
char *fgets(char*str, int n, FILE*fp);
4.从文件写字符串fputs

假定str是一个指向字符串的指针,我们要把他写入fp指向的文件中

fputs(str,fp);		//输出成功,返回0;否则返回非0值
//函数原型:
int fputs (char *str, FILE *fp);

四、用格式化的方式读写文本文件

1.格式化写函数fprintf

栗子:将int型变量i和float型变量f的值按%4d和%.2f的格式输出到fp指向的文件中

fprintf (fp,%4d,%.2f,i,f);
1.格式化读函数fscanf

栗子:文件上有字符“1,2.2”,从中读取整数2送给整型变量i,读取实数2.2送给float型变量f

fscanf (fp,%d,%f″,&i,&f);

它们与printf函数和scanf函数相似,只是fprintf和fscanf函数的读写对象不是终端而是文件。函数区别就是前面要加文件指针

五、用二进制方式向文件读写一组数据

1.写函数fwrite
fwrite(buffer, size, count, fp);
  • buffer: 是一个地址。对fwrite,是要把此地址开始的存储区中的数据向文件输出(。对fread,它是用来存放从文件读入的数据的存储区的地址以上指的是起始地址)。
  • size: 要读写的字节数。
  • count: 要读写多少个数据项(每个数据项长度为size)。
2.读函数fread
fread(buffer, size, count, fp);

栗子:从fp所指向的文件读入10个4个字节的数据,存储到数组f中

  • buffer为f
  • size为4
  • count为10
fread(f,4,10,fp);	//从fp所指向的文件读入10个4个字节的数据,存储到数组f中
示例:

使用fread,fwrite读写文件

六.随机读写数据文件

不了解文件位置等概念的朋友请看:C语言文件:文件位置标记及其定位

1.使文件位置标记指向文件开头rewind

rewind(文件指针);

rewind(fp);

rewind函数的作用是使文件位置标记重新返回文件的开头,此函数没有返回值

2.改变文件位置标记fseek
  • 0代表“文件开始位置”,1为“当前位置”,2为“文件末尾位置”
  • “位移量”:指以“起始点”为基点,向前移动的字节数(长整型)

fseek(文件类型指针, 位移量, 起始点);

fseek (fp,50L,0);		//L代表长整型,将文件位置标记向前移到离文件开头50个字节处
fseek (fp,100L,1); 		//将文件位置标记向前移到离当前位置100个字节处
fseek (fp,-10L,2);		//将文件位置标记从文件末尾处向后退10个字节
3.测定文件位置标记的当前位置ftell
  • ftell函数的作用是得到流式文件中文件位置标记的当前位置,用相对于文件开头的位移量来表示。
  • 调用函数时出错(如不存在fp指向的文件),ftell函数返回值为-1L。
t=ftell(fp);			 //变量存放文件当前位置
if(t==-1L) printf(″error\n″); 	//如果调用函数时出错,输出″error″

七、文件读写的出错检测

1.出错检测 ferror(fp);

在调用各种输入输出函数(如putc,getc,fread,fwrite等)时,如果出现错误,除了函数返回值有所反映外,还可以用ferror函数检查。

  • 在执行fopen函数时,ferror函数的初始值自动置为0。
  • 如果返回一个非零值,表示出错。
  • 对同一个文件每一次调用输入输出函数,都会产生一个新的ferror函数值,因此,应当在调用一个输入输出函数后立即检查ferror函数的值,否则信息会丢失。
  • 只要出现文件读写出错标志,它就一直保留,直到对同一文件调用clearerr函数或rewind函数,或任何其他一个输入输出函数。
2.清除错误标志:clearerr(fp);

ferror函数值为一个非零值,即其他函数出错时。应该立即调用clearerr(fp),使ferror(fp)的值变成0,以便再进行下一次的检测。

有疑问欢迎在评论区留言,有时间将为您做出回复

猜你喜欢

转载自blog.csdn.net/qq_46135352/article/details/106687699