C语言文件操作

目录

1.文件的打开与关闭

 2.文件的顺序读写

3.写文件

4.读文件

5.格式化读写文件(如:结构体)

读文件

 写文件


1.文件的打开与关闭

文件使用方式含义如果指定文件不存在
"r"(只读)为了输入数据,打开一个已经存在的本地文件出错
"w"(只写)为了输出数据,打开一个文本文件建立一个新的文件
"a"(追加)向文本文件尾添加数据建立一个新的文件

"rb"(只读)

为了输入数据,打开一个二进制文件出错
"wb"(只写)为了输出数据,打开一个二进制文件建立一个新的文件
"ab"(追加)向二进制文件尾添加数据出错
"r+"(读写)为了读和写,打开一个文本文件出错
"w+"(读写)为了读和写,建立一个新的文件建立一个新的文件
"a+"(读写)打开一个文件,在文件尾进行读写建立一个新的文件
"rb+"(读写)为了读写打开一个二进制文件出错
"wb+"(读写)为了读和写,新建一个二进制文件建立一个新的文件
"ab+"(读写)打开一个二进制文件,在文件尾进行读和写建立一个新的文件

函数解释:perror()输出为什么打开文件失败 

绝对路径:"D:\\网页下载\\test.txt"——中需要用双斜杠

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main(){
	//打开文件
	FILE* pf = fopen("D:\\网页下载\\test.txt","r");
	if (pf == NULL) {
		perror("fopen");//输出为什么没有打开文件
		return 1;
	}

	//关闭文件
	fclose(pf);
	return 0;
}

 2.文件的顺序读写

内存中程序<-----输入/读取-------文件(硬盘)

内存中程序------输出/写入------->文件(硬盘)

功能函数名适用于
字符输入函数fgetc所有输入流
字符输出函数fputc所有输出流
文本行输入函数fgets所有输入流
文本行输出函数fputs所有输出流
格式化输入函数fscanf所有输入流
格式化输出函数fprintf所有输出流
二进制输入fread文件
二进制输出fwrite文件

3.写文件

fputc用字符写文件,fputs用字符串写文件

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main(){
	//打开文件
	FILE* pf = fopen("D:\\网页下载\\test.txt","w");
	if (pf == NULL) {
		perror("fopen");//输出为什么没有打开文件
		return 1;
	}
	
    //字符写文件
	fputc('b',pf);
	fputc('i', pf);
	fputc('t', pf);
    
    //字符串写文件
	fputs("abc\n", pf);
	fputs("asfeashvfeo\n", pf);


	//关闭文件
	fclose(pf);
	return 0;
}

 注:在以w形式打开时会清空文件原有数据(打开——不写——关闭->文件清空)

4.读文件

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main(){
	//打开文件
	FILE* pf = fopen("D:\\网页下载\\test.txt","r");
	if (pf == NULL) {
		perror("fopen");//输出为什么没有打开文件
		return 1;
	}
	//读文件
	//单个字符读取
	int ret =fgetc(pf);
	printf("%c",ret);
	ret = fgetc(pf);
	printf("%c", ret);
	ret = fgetc(pf);
	printf("%c", ret);

	//字符串读文件
	char arr[10];
	fgets(arr, 3, pf);//3表示:读取俩个字符加一个\0
	printf("%s", arr);
	fgets(arr, 3, pf);//不换行读取
	printf("%s", arr);
	fgets(arr, 3, pf);
	printf("%s", arr);

	//关闭文件
	fclose(pf);
	return 0;
}

5.格式化读写文件(如:结构体)

读文件

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

struct s {
	char arr[10];
	int num;
	float sc;
};

int main(){
	//打开文件
	FILE* pf = fopen("D:\\网页下载\\test.txt","w");
	if (pf == NULL) {
		perror("fopen");//输出为什么没有打开文件
		return 1;
	}
	
	struct s s = { "abcdef",10,5.5f };

	//写文件

	fprintf(pf, "%s %d %f", s.arr, s.num, s.sc);

	//关闭文件
	fclose(pf);
	return 0;
}

 写文件

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

struct s {
	char arr[10];
	int num;
	float sc;
};

int main(){
	//打开文件
	FILE* pf = fopen("D:\\网页下载\\test.txt","r");
	if (pf == NULL) {
		perror("fopen");//输出为什么没有打开文件
		return 1;
	}
	
	struct s s;

	//读文件

	fscanf(pf, "%s %d %f", s.arr, &s.num, &s.sc);

	printf("%s %d %f", s.arr, s.num, s.sc);

	//关闭文件
	fclose(pf);
	return 0;
}

练习:读取文件,每行不超过100个字符,输出每行中字母最多的单词的字母数 

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//读取文件,每行不超过100个字符,输出每行中字母最多的单词的字母数
void findmax(FILE *pf) {
	int n=0;
	int max=0;
	int ret = fgetc(pf);
	while (ret != -1) {
		while ((char)ret!='\n'&&ret != -1) {
			while (ret != 32&& (char)ret != '\n'&&ret!=-1) {
				n++;
				ret = fgetc(pf);
			}
			if (max <= n) {
				max = n; 
				n = 0;
			}
			else {
				n = 0;
			}
			if ((char)ret != '\n'&& ret != -1) {
				ret = fgetc(pf);
			}
			
		}
		printf("%d\n",max);
		max = 0;
		ret = fgetc(pf);
		
	}
	
}



int main(){
	//打开文件
	FILE* pf= fopen("D:\\网页下载\\test.txt","r");
	if (pf==NULL) {
		perror("fopen");
		return;
	}
	//文件操作
	findmax(pf);

	//关闭文件
	fclose(pf);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值