C语言详解FILE文件操作-创新互联

FILE文件操作
    • 文件打开与关闭
      • fopen函数打开数据文件
      • fclose函数打开数据文件
    • 顺序读写数据文件
      • fgetc/fputc向文件读写字符
      • fgets/fputs向文件读写一个字符串
      • fread/fwrite用二进制方式向文件读写一组数据
    • 随机读写数据文件
      • rewind函数使文件位置标记指向文件开头
      • fseek函数改变文件位置标记

创新互联建站专注于吉隆网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供吉隆营销型网站建设,吉隆网站制作、吉隆网页设计、吉隆网站官网定制、微信小程序服务,打造吉隆网络公司原创品牌,更为您提供吉隆网站排名全网营销落地服务。创新互联专注于阿拉山口网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供阿拉山口营销型网站建设,阿拉山口网站制作、阿拉山口网页设计、阿拉山口网站官网定制、成都微信小程序服务,打造阿拉山口网络公司原创品牌,更为您提供阿拉山口网站排名全网营销落地服务。

文件打开与关闭 fopen函数打开数据文件

fopen函数的调用方式为:fopen(文件名,使用方式);

例如:fopen("student.txt", "r"); // 以只读的方式打开student.txt文件

打开文件的常用方式:

"r"(只读):只能从文件中读数据,该文件必须先存在,否则打开失败
"w"(只写):只能向文件写数据,若指定的文件不存在则创建它,如果存在则先删除它再重建一个新文件
"a"(追加):向文件增加新数据(不删除原有数据),若文件不存在则打开失败,打开时位置指针移到文件末尾


"rb"(只读):只能从文件中读数据,该文件二进制文件必须先存在,否则打开失败
"wb"(只写):向文件写数据,若指定的二进制文件不存在则创建它,如果存在则先删除它再重建一个新文件
"ab"(追加):向二进制文件尾部添加数据,若文件不存在则打开失败,打开时位置指针移到文件末尾


"r+":可读/写数据,该文件必须先存在,否则打开失败
"w+":可读/写数据,用该模式打开新建一个文件,先向该文件写数据,然后可读取该文件中的数据
"a+":可读/写数据,原来的文件不被删去,位置指针移到文件末尾

打开二进制文件的模式与打开文本文件的含义是一样的,不同的是模式名称里面多一个字母'b’,以表

常用一下方式打开一个文件:

if((fp = fopen("fishc.txt", "r")) == NULL){
		printf("can not open fishc1.txt");
		system("pause");
}
fclose函数打开数据文件

关闭文件用fclose函数, fopen与fclose是成对出现的,有fopen就要有fclose。
fclose函数调用的一般形式为:fclose(文件指针);
例如:fclose(fp);

顺序读写数据文件 fgetc/fputc向文件读写字符
函数名调用形式功能返回值
fgetcfgetc(fp)从fp指向的文件读入一个字符读取成功,返回所读的字符,失败则返回文件结束标志EOF(-1)
fputcfputc(ch, fp)把字符ch写到文件指针变量fp所指的文件中写入成功,返回所写的字符, 写入失败返回EOF(-1)

fputc应用
在这里插入图片描述在这里插入图片描述fgetc应用
在这里插入图片描述在这里插入图片描述

fgets/fputs向文件读写一个字符串
函数名调用形式功能返回值
fgetsfgets(str, n, fp)从fp指向的文件读入一个长度为(n-1)的字符串,存放在字符数组str中读取成功,返回地址str,失败则返回NULL
fputsfputs(str, fp)把str所指向的字符串写到文件指针变量fp所指向的文件中写入成功,返回0, 写入失败返回非0
fputs应用
在这里插入图片描述在这里插入图片描述fgets应用
在这里插入图片描述
fread/fwrite用二进制方式向文件读写一组数据

调用形式:

fread(buffer, size, count, fp);
fwrite(buffer, size, count, fp);
其中:
	buffer: 是一个地址,对于fread来说,它是用来存放从文件读入的数据的存储区的地址。对fwrite来说,要把此地址开始的存储区中的数据向文件输出。
	size:要读些的字节数
	count:要读些多少个数据项(每个数据项长度为size)
	fp: FILE类型的指针

fwrite示例:

#include#include#include#define SIZE 4

struct Student{
	char name[10];
	int num;
	int age;
	char addr[15];
}stu[SIZE];  // 在这里声明相当于全局变量

void write(){
	int i;
	FILE *fp;  // 文件指针
	if((fp = fopen("students", "wb")) == NULL){  // 为了写入数据,打开一个二进制文件
		printf("read error!\n");
		exit(0);
	}
	
	for(i = 0; i< SIZE; i++){ fwrite(&stu[i], sizeof(struct Student), 1, fp); // 从文件中读取一个数据块,读写的时候是以二进制形式进行的 } fclose(fp); } void main(){ int i; for(i = 0; i< SIZE; i++){ // 注意%s对应项不用再取地址符号&了,应为本身就是地址,向int,float都要有&取地址符号 scanf("%s %d %d %s", stu[i].name, &stu[i].age, &stu[i].num, stu[i].addr); } write(); }

在这里插入图片描述fread示例:

#include#include#include#define SIZE 4

struct Student{
	char name[10];
	int num;
	int age;
	char addr[15];
}stu[SIZE];  // 在这里声明相当于全局变量

void read(){
	int i;
	FILE *fp;  // 文件指针
	if((fp = fopen("students", "rb")) == NULL){  // 为了读取数据,打开一个二进制文件
		printf("read error!\n");
		exit(0);
	}
	
	for(i = 0; i< SIZE; i++){ fread(&stu[i], sizeof(struct Student), 1, fp); // 从文件中读取一个数据块,读写的时候是以二进制形式进行的 } fclose(fp); } void main(){ int i; read(); for(i = 0; i< SIZE; i++){ printf("%s %d %d %s\n", stu[i].name, stu[i].age, stu[i].num, stu[i].addr); } }

在这里插入图片描述

随机读写数据文件 rewind函数使文件位置标记指向文件开头

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

例题:有一个文件,内有一些信息,要去第一次将它的内容显示在屏幕上,第二次把它复制到另一个文件上.
#include#includevoid main(){
	FILE *fp1, *fp2;
	fp1 = fopen("student.txt", "r");     // 打开需要读的文件
	fp2 = fopen("student_copy.txt", "w");  // 打开需要写入的文件
	
	while(!feof(fp1)){     // 逐个读入字符并输出到屏幕
		char ch = fgetc(fp1);
		putchar(ch);
	}
	
	rewind(fp1);  // 
	
	while(!feof(fp1)){
		char ch = fgetc(fp1);
		fputc(ch, fp2);
	}
	
	fclose(fp1);
	fclose(fp2);
}
fseek函数改变文件位置标记

fseek函数的调用形式:fseek(文件类型指针,位移量,起始点)

起始点名字用数字代表
文件开始位置SEEK_SET0
文件当前位置SEEK_CUR1
文件末尾位置SEEK_END2
#include#include#include#define SIZE 4

struct Student{
	char name[10];
	int num;
	int age;
	char addr[15];
};  // 在这里声明相当于全局变量

void main(){
	struct Student student;
	FILE *fp;  // 文件指针
	if((fp = fopen("students", "rb")) == NULL){  // 这个是一定要进行判断的,打开一个只读二进制文件
		printf("read error!\n");
		exit(0);
	}
	
	// i * sizeof(struct Student)表示去第i+1个数据,和数组相似,i像数组的下标
	fseek(fp, 3*sizeof(struct Student), 0);  
	fread(&student, sizeof(struct Student), 1, fp);
	
	
	printf("%s   %d   %d   %s", student.name, student.age, student.num, student.addr);
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


文章名称:C语言详解FILE文件操作-创新互联
文章分享:http://azwzsj.com/article/cehsid.html