C语言文件相关操作(fclose fopen.....)

文件的打开和关闭

      文件的典型操作:打开文件   读文件   写文件    关闭文件

      文件在读之前应该先打开文件,在使用结束之后应该关闭文件

ANSIC规定使用 fopen 函数来打开文件,用 fclose 来关闭文件

FILE *fopen( const char *filename, const char *mode );
//打开文件
//filename  文件路径
//mode      打开方式:读/写/(读写)
//每个函数都返回一个指向打开文件的指针,空指针值指示错误
int fclose( FILE *stream );
//关闭文件
//返回值: 成功返回 0 ;失败返回 EOF

文件的打开方式:

文件使用方式含义如果文件不存在
“r”(只读)为了输入数据,打开一个已经存在的文本文件出错
“w”(只写)为了输出数据,打开一个文本文件建立一个新文件
"a" (追加)向文本文件末尾添加数据出错
“rb”(只读)为了输入数据,打开一个二进制文件出错
“wb”(只写)为了输出数据,打开一个二进制文件建立一个新文件
"ab"   (追加)向二进制文件末尾添加数据出错
“r+”(读写)为了读和写,打开一个文本文件出错
“w+”(读写)为了读和写,建立一个新的文件建立一个新文件
"a+" (读写)打开一个文件,在文件尾进行读写建立一个新文件

 

 

Tip:文本文件:以ASCII字符的形式存储的文件就是文本文件

二进制文件:数据在内存中以二进制的形式存储,并且不加转换的输出到外存

​
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
void test()
{
	// .  当前目录
	// .. 上一级目录
	//fp 这类对象叫句柄
	//FILE* fp = fopen("./test.txt", "r");
    //按r只读方式打开
    //
	//FILE* fp = fopen("./test.txt", "w");
    //按w只写方式打开,会先清空文件
    //
 	FILE* fp = fopen("./test.txt", "a");//在文件末尾追加写
	if (fp == NULL)
	{
		printf("fopen failed\n");
	}
	else {
		printf("fopen ok!\n");
	}
	//对文件进行操作
	//fread 读文件
	// size_t fread( void* ptr ,size_t size,size_t count,FILE* stream);
	//读取count个大小为size的元素
	//返回值:返回真实读到数据的个数
	char buf[1024] ="aaaaa";
	fwrite(buf, 1, strlen(buf), fp);
	/*size_t size= fread(buf, 1, 10, fp);
	printf("%s\n", buf);
	printf("%u\n", size);//10 */
	//关闭文件
	//如果频繁进行文件打开,又没有关闭
	//叫做“文件描述符泄露”
	fclose(fp);
}
int main()
{
	test();
	system("pause");
	return 0;
}

​

文件的读写

      文件的顺序读写

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

文件

二进制输出fwrite文件

  

 

 文件的随机读写

fseek: 根据文件指针的位置和偏移量来定位文件指针

  int  fseek(FILE* stream, long int offset,int orgin );

fteel:返回文件指着相对于起始位置的偏移量

 long int  ftell ( FILE* stream );

rewind:让文件指针的位置回到文件的起始位置

void rewind ( FILE* stream );

      一组函数的对比

scanf / fscanf / sscanf

printf / fprintf  / sprintf

void test1()
{
	//stdin , FILE* ->标准输入
	//stdout , FILE* ->标准输出
	//键盘,显示器,一切皆文件的思想
	FILE* fp = fopen("../test.txt", "w");
	if (fp == NULL)
	{
		printf("test.txt fopen failed!\n");
		return;
	}
	
    // fgets 和 fputs 的使用
	//char buf[1024] = { 0 };
	fgets 如果返回空指针,说明读到了EOF
	//while (fgets(buf, sizeof(buf), stdin) != NULL)
	//{
	//	fputs(buf, stdout);
	//	fputs(buf, fp);
	//}
	
	// fgetc 和 fputc 的使用
	//int c;
	//while ((c = fgetc(stdin)) != EOF) {
	//	fputc(c, stdout);
	//	fputc(c, fp);
	//}
	fflush(fp);
	fclose(fp);
}
void test2()
{
	typedef struct student {
		char name[1024];
		int score;
	}student;
	printf("hello\n");
	fprintf(stdout, "hello\n");

	//能够把一个数据进行格式化,然后放到一个字符串中
	//这个操作就是把一个整数,转换成一个字符串
	char buf[1024] = { 0 };
	sprintf(buf, "%d", 100);
	printf("%s\n", buf);
	int num = 0;
	sscanf(buf, "%d", &num);
	//解析buf中的内容,以%d的形式放到num中
	printf("%d\n", num);

	//将一个结构体转换为字符串
	student stu = { "zhangsan",100 };
	char buf1[1024] = { 0 };
	sprintf(buf1, "%s,%d", stu.name, stu.score);
	printf("%s\n", buf1);
}
int main()
{
	//test1();
    test2();
	system("pause");
	return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值