15.文件操作

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>//标准输入输出库
#include<stdlib.h>//系统库
#include<string.h>

#define BUF_SIZE  1024

typedef struct _STU
{
	int iNum;
	char acNames[20];
	float fscore;
}STU;

int  FwriteStr(char *pcFileName, char *pc);
int  FappendStr(char *pcFileName, char *pc);
int  FreadStr(char *pcFileName);
int  FreadAny(char *pcFileName, int iLen);
int  FwriteAny(char *pcFileName, char *pc, int iLen);
int  FappendAny(char *pcFileName, char *pc, int iLen);
int  FwriteStu(char *pcFileName, STU *ptStu);
int  FappendStu(char *pcFileName, STU *ptStu);
int  FreadStu(char *pcFileName);
int  FreadNumStu(char *pcFileName, int iNum);

int main()
{
	/*
	文件类型:
	文本文件:ASCII码文件,可识别
	二进制进制:乱码,MP3,MP4
	*/
	/*
	文件指针:用一个指针变量指向一个文件
	FILE  *fp;
	*/
	/*
	通过文件指针打开和关闭文件
	fopen
	fclose

	打开文件的模式:
	1.r read; w write; a  append;b  binary; + r+w
	2、r,只读,这个文件必须存在,否则打开出错,返回NULL
	3、w,只写,如果这个文件已经存在,打开重写,如果不存在就会新建一个
	4、a,添加,这个文件必须存在,往文件后面添加内容,原先的内容无法更改,只能添加
	5、总结,只想读取内容,rb;重写文件,wb+;如果是添加内容,ab+;
	*/

	/*
	读写文件,都会造成文件指针位置的移动,可以理解为光标的移动
	*/
	char acBuf[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	STU tStu[2] = { {1,"路飞老师",100}, {2,"小鱼老师",99} };

	FwriteStr("config.ini","择善结构\n");
	FappendStr("config.ini", "路飞老师\n");
	FreadStr("config.ini");

	FwriteAny("config.ini", acBuf,10 );//文件名,应该包含完整路径,否则就是当前目录下的文件	
	FappendAny("config.ini", acBuf,10);
	FreadAny("config.ini",10);

	FwriteStu("config.ini",&tStu[0]);//文件名,应该包含完整路径,否则就是当前目录下的文件	
	FappendStu("config.ini", &tStu[1]);
	//FreadStu("config.ini");
	FreadNumStu("config.ini",1);
	/*
	随机读写:光标的跳转
	rewind(fp); 将光标移到文件首,重新读文件
	fseek(fp,offset,loc) ;将光标移动到相对于loc offset大小的位置
	loc :  SEEK_SET     文件首     fseek(fp,20,SEEK_SET);文件首偏移20个字节的位置
			SEEK_CUR     当前位置     fseek(fp,20,SEEK_CUR);文件指针当前位置偏移20个字节的位置
			SEEK_END     文件尾     fseek(fp,20,SEEK_END);文件尾偏移20个字节的位置(反方向)
	*/

	system("pause");
	return 0;
}
/*=========================
* Function 	:FwriteStr
* Description   :写字符串到指定文件,会重写文件
* Input Para    : char *pcFileName要写入的内容的文件名,char c要写入的字符
* Output Para   : 无
* Return Value	: 操作出错返回-1,成功返回0
===========================*/
int  FwriteStr(char *pcFileName,char *pc)
{
	FILE *fp;//定义文件指针

	fp = fopen(pcFileName, "wb+");
	/*
	使用之前应该检测一下文件是否打开成功
	*/
	if (fp == NULL)
	{
		printf("[%s]文件打开失败\n", pcFileName);
		return -1;
	}

	fputs(pc, fp);//写入字符串,字符串专用

	fclose(fp);//关闭文件

	return 0;

}
/*=========================
* Function 	:FappendStr
* Description   :添加一个字符串到指定文件
* Input Para    : char *pcFileName要写入的内容的文件名,char c要写入的字符
* Output Para   : 无
* Return Value	: 操作出错返回-1,成功返回0
===========================*/
int  FappendStr(char *pcFileName, char *pc)
{
	FILE *fp;//定义文件指针

	fp = fopen(pcFileName, "ab+");
	/*
	使用之前应该检测一下文件是否打开成功
	*/
	if (fp == NULL)
	{
		printf("[%s]文件打开失败\n", pcFileName);
		return -1;
	}

	fputs(pc, fp);

	fclose(fp);//关闭文件

	return 0;
}
/*=========================
* Function 	:FreadStr
* Description   :一行一行读出来,并打印
* Input Para    : char *pcFileName要写入的内容的文件名
* Output Para   : 无
* Return Value	: 操作出错返回-1,成功返回0
===========================*/
int  FreadStr(char *pcFileName)
{
	FILE *fp;//定义文件指针
	char pcBuf[BUF_SIZE] = { 0 };

	fp = fopen(pcFileName, "rb");
	/*
	使用之前应该检测一下文件是否打开成功
	*/
	if (fp == NULL)
	{
		printf("[%s]文件打开失败\n", pcFileName);
		return -1;
	}

	/*遍历文件*/
	while (!feof(fp))//feof 如果到达文件尾,就返回0,EOF
	{
		fgets(pcBuf, BUF_SIZE,fp);//读取BUF_SIZE个字符到pcBuf中,遇到换行符或者文件尾就提前结束(读取一行)
		printf("%s", pcBuf);
		memset(pcBuf, 0, BUF_SIZE);//将BUF_SIZE个0赋值到pcBuf中,清空数组
	}

	fclose(fp);//关闭文件

	return 0;

}
/*=========================
* Function 	:FwriteStr
* Description   :写任意内容到指定文件,会重写文件
* Input Para    : char *pcFileName要写入的内容的文件名
* Output Para   : 无
* Return Value	: 操作出错返回-1,成功返回0
===========================*/
int  FwriteAny(char *pcFileName, char *pc,int iLen)
{
	FILE *fp;//定义文件指针

	fp = fopen(pcFileName, "wb+");
	/*
	使用之前应该检测一下文件是否打开成功
	*/
	if (fp == NULL)
	{
		printf("[%s]文件打开失败\n", pcFileName);
		return -1;
	}

	fwrite(pc, sizeof(char), iLen, fp);//数据块的大小(一般是类型大小)size,块的个数n,实际写入size*n

	fclose(fp);//关闭文件

	return 0;

}
int  FappendAny(char *pcFileName, char *pc, int iLen)
{
	FILE *fp;//定义文件指针

	fp = fopen(pcFileName, "ab+");
	/*
	使用之前应该检测一下文件是否打开成功
	*/
	if (fp == NULL)
	{
		printf("[%s]文件打开失败\n", pcFileName);
		return -1;
	}

	fwrite(pc, sizeof(char), iLen, fp);//数据块的大小(一般是类型大小)size,块的个数n,实际写入size*n

	fclose(fp);//关闭文件

	return 0;

}
/*=========================
* Function 	:FreadStr
* Description   :怎么写进去的怎么读出来,才能保证读出来的内容跟写入的一致,并打印
* Input Para    : char *pcFileName要写入的内容的文件名
* Output Para   : 无
* Return Value	: 操作出错返回-1,成功返回0
===========================*/
int  FreadAny(char *pcFileName,int iLen)
{
	FILE *fp;//定义文件指针
	char pcBuf[BUF_SIZE] = { 0 };
	int i;

	fp = fopen(pcFileName, "rb");
	/*
	使用之前应该检测一下文件是否打开成功
	*/
	if (fp == NULL)
	{
		printf("[%s]文件打开失败\n", pcFileName);
		return -1;
	}

	/*遍历文件*/
	while (!feof(fp))//feof 如果到达文件尾,就返回0,EOF
	{
		//读取BUF_SIZE*size个字符到pcBuf中,遇到文件尾就提前结束
		fread(pcBuf, sizeof(char), iLen, fp);
		for (i = 0; i < iLen; i++)
		{
			printf("%d ", pcBuf[i]);
		}
		memset(pcBuf, 0, BUF_SIZE);//将BUF_SIZE个0赋值到pcBuf中,清空数组
	}

	fclose(fp);//关闭文件

	return 0;

}


int  FwriteStu(char *pcFileName, STU *ptStu)
{
	FILE *fp;//定义文件指针

	fp = fopen(pcFileName, "wb+");
	/*
	使用之前应该检测一下文件是否打开成功
	*/
	if (fp == NULL)
	{
		printf("[%s]文件打开失败\n", pcFileName);
		return -1;
	}

	fwrite(ptStu, sizeof(STU), 1, fp);//数据块的大小(一般是类型大小)size,块的个数n,实际写入size*n

	fclose(fp);//关闭文件

	return 0;

}
int  FappendStu(char *pcFileName, STU *ptStu)
{
	FILE *fp;//定义文件指针

	fp = fopen(pcFileName, "ab+");
	/*
	使用之前应该检测一下文件是否打开成功
	*/
	if (fp == NULL)
	{
		printf("[%s]文件打开失败\n", pcFileName);
		return -1;
	}

	fwrite(ptStu, sizeof(STU), 1, fp);//数据块的大小(一般是类型大小)size,块的个数n,实际写入size*n

	fclose(fp);//关闭文件

	return 0;

}
/*=========================
* Function 	:FreadStr
* Description   :怎么写进去的怎么读出来,才能保证读出来的内容跟写入的一致,并打印
* Input Para    : char *pcFileName要写入的内容的文件名
* Output Para   : 无
* Return Value	: 操作出错返回-1,成功返回0
===========================*/
int  FreadStu(char *pcFileName)
{
	FILE *fp;//定义文件指针
	STU tStu = { 0 };


	fp = fopen(pcFileName, "rb");
	/*
	使用之前应该检测一下文件是否打开成功
	*/
	if (fp == NULL)
	{
		printf("[%s]文件打开失败\n", pcFileName);
		return -1;
	}

	/*遍历文件*/
	while (!feof(fp))//feof 如果到达文件尾,就返回0,EOF
	{
		//读取BUF_SIZE*size个字符到pcBuf中,遇到文件尾就提前结束
		fread(&tStu, sizeof(STU), 1, fp);
		if (tStu.iNum > 0)
		{
			printf("学号:%d;姓名:%s;分数:%f\n", tStu.iNum, tStu.acNames, tStu.fscore);
		}
		
		memset(&tStu, 0, sizeof(STU));//将BUF_SIZE个0赋值到pcBuf中,清空数组
	}

	fclose(fp);//关闭文件

	return 0;

}
int  FreadNumStu(char *pcFileName,int iNum)
{
	FILE *fp;//定义文件指针
	STU tStu = { 0 };


	fp = fopen(pcFileName, "rb");
	/*
	使用之前应该检测一下文件是否打开成功
	*/
	if (fp == NULL)
	{
		printf("[%s]文件打开失败\n", pcFileName);
		return -1;
	}

	fseek(fp, sizeof(STU)*iNum, SEEK_SET);//跳过iNum个学生
	/*遍历文件*/
	while (!feof(fp))//feof 如果到达文件尾,就返回0,EOF
	{
	
		fread(&tStu, sizeof(STU), 1, fp);
		if (tStu.iNum > 0)
		{
			printf("学号:%d;姓名:%s;分数:%f\n", tStu.iNum, tStu.acNames, tStu.fscore);
		}

		memset(&tStu, 0, sizeof(STU));//将BUF_SIZE个0赋值到pcBuf中,清空数组
	}

	fclose(fp);//关闭文件

	return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值