C语言 文件操作

文件分类

1、文本文件、二进制文件
2、普通文件、设备文件(显示器、打印机、键盘等)
3、源文件、目标文件、可执行文件、头文件、数据文件

在c语言中,对文件操作由库函数完成
FILE 文件类型,构造类型,系统提供的结构体
文件指针 FILE *f1;

打开文件

/*
打开文件语法格式
FILE *fopen(char *filename,char *mode);
按照指定的模式打开文件
mode 打开模式的字符串
“r”:只读
“w”:只写
“a”:追加
“rb”:对二进制只读
“wb”:二进制只写
“ab”:二进制追加
“r+”:可读写
“w+”:打开或新建文件
“a+”:打开文件,可读,也可以追加

返回值问题:如果打开文件成功,则获取对应地址,否则返回NULL
*/
#include <stdio.h>
#include <stdlib.h>
int main(){
	FILE *fp;
	char ch;
	fp = fopen("01-文件分类.txt","r");
	if(fp == NULL){
		printf("不能打开文件\n");
		exit(0);
	}
	ch = fgetc(fp);//从文件中获取一个字符
	while(ch != EOF){//EOF系统定义的文件结束符
		printf("%c\n",ch);
		ch = fgetc(fp);
	}
	fclose(fp);//操作完文件之后,一定要关闭文件
	return 0}

打开文件写入内容

//键盘输入一个字符串,以#号结束,存入文件中
#include <stdio.h>
int main(){
	FILE *fp;
	char ch;
	if((fp = fopen("03.txt","w+")) == NULL){
		printf("不能打开文件\n");
		return 0;
	}
	printf("键盘输入一个字符串,以#号结束并回车:");
	ch = getchar();
	while(ch ! = '#'){
		fputc(ch,fp);//把ch变量中的内容输出到文件中
		ch = getchar();
	}
	fclose(fp);
	return 0;
}

打开文件读出内容并输出终端

#include <stdio.h>
int main(){
	FILE *fp;
	if((fp = fopen("03.txt","r"))==NULL){
		printf("不能打开文件!")}else{
		char ch = fgetc(fp);
		while( ch != EOF){
			putchar(ch);
			ch = fgetc(fp);
		}
		fclose(fp);
	}
	return 0;
}

fputs:向指向的文件中输出一个字符串,字符串写入文件中

#include <stdio.h>
#include <stdlib.h>
int main(){
	FILE *fp;
	char fileName[30],str[50];
	printf("请输入一个文件:");
	scanf("%s",fileName);
	if((fp = fopen(fileName,"w"))==NULL){
		printf("打开失败\n");
		printf("按任意键继续........");
		getchar();
		exit(0);
	}
	printf("请输入一个字符串");
		getchar();//消化多余的回车符。接收输入文件名后的那个回车符
	gets(str);
	fputs(str,fp);//把str字符串写入文件fp中
	fclose(fp);
	return 0;
}

fgets (输入到字符串,输入多少字符数,文件指针变量)

#include <stdio.h>
#include <stdlib.h>
int main(){
	FILE *fp;
	char filename[30],str[5];
	printf("请输入一个文件名:");
	scanf("%s",filename);
	if((fp = fopen(filename,"r"))==NULL){
		printf("打开失败!\n");
		printf("按任意键继续......");
		getchar();
		exit(0);
	}
	fgets(str,sizeof str,fp);//读取文件中的若干字符存入str数组中
	printf("%s\n",str);
	return 0;
}

fprintf();

/*
格式化字符串对应的内容输出到文件
语法格式:
length = fprintf(文件,格式化字符串,输出列表);
*/
#include <stdio.h>
int main(){
	FILE *fp;
	int i = 65;
	if((fp = fopen("07.txt","w"))==NULL){
		printf("打开文件失败\n");
		return 0;
	}
	k = fprintf(fp,"%d,%d",i,i);
	printf("k=%d\n",k);
	fclose(fp);
	return 0;
}
#include <stdio.h>
int main(){
	FILE *fp;
	int i = 65,k;
	if((fp = fopen("08.txt","w"))==NULL){
		printf("打开文件失败!\n");
		return 0;
	}
	k = fprintf(fp,"%c,%c",i,i);
	printf("k=%d\n",k);
	fclose(fp);
    return 0;
}

fscanf(文件,格式化字符串,输入列表)

读取文件中对应的信息

#include <stdio.h>
int main(){
	FILE *fp;
	int i,k;
	if((fp = fopen("07.txt","r"))==NULL){
		printf("打开文件失败\n");
		return 0;
	}
	fscanf(fp,"%d,%d",&i,&k);
	printf("i=%d,k=%d\n",i,k);
	fclose(fp);
	return 0;
}

fread

/*
	1、读文件内容到内存变量buffer中
	fread(buffer,size,count,fp)
	fread(存数据的指针变量地址,字节数,次数,文件指针)

	2、把内存变量buffer中的内容写入文件中
	fwrite(buffer,size,count,fp)

*/
//先把通讯录信息写入文件,再读出打印出来
#include <stdio.h>
#include <stdlib.h>
struct addressList{
	char name[30];
	char address[50];
	char phoneTel[11];
} info[10];
//写入n条通讯录
void save(char *filename,int n){
	FILE *fp;
	int i;
	if((fp = fopen(filename,"wb"))==NULL){
		printf("打开失败!!");
		exit(0);
	}
	for(i = 0;i < n;i++){
		if(fwrite(&info[i],(sizeof(struct addressList)),1,fp)!=1){
			printf("文件写入出错!!\n");
		}
	}
	fclose(fp);
}
void show(char *filename,int n){
	int i;
	FILE *fp;
	if((fp = fopen(filename,"rb"))==NULL){
		printf("打开文件失败!\n");
		exit(0);
	}
	for(i = 0;i < n;i++){
		struct addressList	temp;	
		fread(&temp,(sizeof(struct addressList)),1,fp);
		printf("姓名:%s\n地址:%s\n手机号:%s\n",temp.name,temp.address,temp.phoneTel);
	}
	fclose(fp);
}
int main(){
	int i,n;
	char filename[50];
	printf("录入通讯录的条数:");
	scanf("%d",&n);
	printf("输入通讯录要保存到的文件名:");
	scanf("%s",filename);
	for(i = 0;i < n;i++){
		printf("请输入第%d条通讯录的姓名、地址、电话:\n",i+1);
		scanf("%s%s%s",info[i].name,info[i].address,info[i].phoneTel);
	}	
	save(filename,n);
	show(filename,n);
    return 0;
}

文件定位操作函数

/*
	1、fseek函数
	fseek(文件类型指针,偏移量,起始点)
	起始点可以是文件头(0)、文件尾(2)、当前位置(1)
	fseek(fp,-20L,2);
	//以上代码表示:把文件内部位置指针从文件尾后退20个字节
	2、rewind函数
		rewind(fp):把文件内部位置指针移到文件头
	3、ftell函数
		获取文件内部位置指针的当前位置,如果位置在文件尾,则获取到文件总长度。

	
*/
#include <stdio.h>
int main(){
    return 0;
}

fseek

//fseek(文件类型指针,位移量,起始点);
//把文件内部定位位置的指针从指定的起始点移动若干字节(位移量)
//指定的起始点有三种:开头(0)、当前位置(1)、结尾(2)
//					SEEK_SET	SEEK_CUR   	SEEK_END
/*
向任意一个二进制文件中写入一个长度大于6的字符串,然后从该字符串的第6个字符开始输出剩余的字符。
*/
#include <stdio.h>
#include <stdlib.h>
int main(){
	FILE *fp;
	char filename[30],str[50];
	printf("请输入文件名:");
	scanf("%s",filename);
	//printf("%s\n",filename);
	if((fp = fopen(filename,"wb"))==NULL){
		printf("打开文件失败~");
		printf("按任意键继续.......");
		getchar();
		exit(0);
	}
	printf("请输入一个字符串(长度大于6小于50):");
	scanf("%s",str);
	//printf("%s\n",str);
	fputs(str,fp);
	fclose(fp);
	
	if((fp = fopen(filename,"rb"))==NULL){
		printf("打开文件失败~");
		printf("按任意键继续.......");
		getchar();
		exit(0);
	}	
	fseek(fp,5L,0);//把文件内部的位置指针指向第6个字节的位置
	fgets(str,sizeof(str),fp);
	puts(str);
	return 0;
}

rewind

//rewind(fp)使文件内部的位置指针指向文件头
//把abc123文件中的内容打印两次
#include <stdio.h>
int main(){
	FILE *fp;
	char ch;
	fp = fopen("abc123","rb");
	ch = fgetc(fp);
	while(ch != EOF){
		putchar(ch);
		ch = fgetc(fp);
	}
	printf("\n");
	//rewind(fp);//让文件内部的位置指针指向了文件头
	fseek(fp,0,0);//此用法 与 rewind(fp)功能相同
	ch = fgetc(fp);
	while(ch != EOF){
		putchar(ch);
		ch = fgetc(fp);
	}
	printf("\n");
    return 0;
}

ftell

//ftell(fp):返回文件内部的位置指针的当前位置,从文件头开始计算。返回-1表示出错。

//通过此函数可以求字符串长度
#include <stdio.h>
int main(){
	FILE *fp;
	char ch;
	long length;
	fp = fopen("abc123","rb");
	ch = fgetc(fp);
	while(ch != EOF){
		putchar(ch);
		ch = fgetc(fp);
	}
	printf("\n");
	length = ftell(fp);
	printf("文件的总字符数,即字符串长度为:%ld\n",length);	
	fclose(fp);
    return 0;
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值