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 
#include 
#include 
#include 
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;
}

你可能感兴趣的:(C,file-operaton)