文件操作(基础知识c语言详解)-创新互联

文章目录
  • 一.前言
  • 二.FILE简介
  • 三.文件函数
    • 1.fopen打开文件
    • 2.fclose关闭文件
    • 3.顺序读写文件
      • 1)fputc
      • 2)fgetc
      • 3)fputs
      • 4)fgets
      • 5)fprint
      • 6)fscanf
      • 7)fwrite
      • 8)fread
    • 4.随机读写文件
      • 1)fseek
      • 2)ftell
      • 3)rewind

专注于为中小企业提供成都网站制作、成都网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业乐东黎族免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了成百上千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。一.前言

为什么使用文件?

我前面学习结构体时,写了通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增加、删除数据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了,等下次运行通讯录程序的时候,数据又得重新录入,如果使用这样的通讯录就很难受。

我们在想既然是通讯录就应该把信息记录下来,只有我们自己选择删除数据的时候,数据才不复存在。这就涉及到了数据持久化的问题,我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据库等方式。

使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。

二.FILE简介

FILE是一个结构体,在vs2013中FILE有如下定义:
在这里插入图片描述

三.文件函数 1.fopen打开文件

在这里插入图片描述图片来自cplusplus网站

filename 是要打开的文件名
mode 是对文件的操作
常见操作如下:
在这里插入图片描述

“r”(只读) 为了输入数据, 打开一个已经存在的文本文件 

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

 “wb+”(读写) 为了读和写新建一个新的二进制文件 
 
 “ab+”(读写) 打开一个二进制文件,在文件尾进行读和写

在这里插入图片描述

使用示范

FILE* pf = fopen("test.txt", "r");
	
		if (NULL == pf)
		{	perror("fopen");
			return 1;
		}

注意"r","test.txt"必须用双引号

2.fclose关闭文件

在这里插入图片描述

int main()
{//打开文件
	FILE* pf = fopen("test.txt", "w");

	if (NULL == pf)
	{perror("fopen");
		return 1;
	}

	//关闭文件
	fclose(pf);
	pf = NULL;

	return 0;
}
3.顺序读写文件

在这里插入图片描述

1)fputc

在这里插入图片描述
使用示范:

int main()
{//打开文件
	FILE* pf = fopen("test.txt", "w");

	if (NULL == pf)
	{perror("fopen");
		return 1;
	}

	//写文件
	int i = 0;
	for (i = 0; i< 26; i++)
	{fputc('a'+i, pf);
	}

	//关闭文件
	fclose(pf);
	pf = NULL;

	return 0;
}

结果展示:
在这里插入图片描述

2)fgetc

在这里插入图片描述
注意返回类型是int

使用示范:

#define _CRT_SECURE_NO_WARNINGS
#includeint main()
{//打开文件
	FILE* pf = fopen("test.txt", "r");

	if (NULL == pf)
	{perror("fopen");
		return 1;
	}
		//读文件
		int i = 0;
		for (i = 0; i< 26; i++)
		{	int ch = fgetc(pf);
			printf("%c ", ch);
		}
	
	fclose(pf);
	pf = NULL;

	return 0;
}

结果展示:
在这里插入图片描述

3)fputs

一行一行的写入

使用示范:

#define _CRT_SECURE_NO_WARNINGS
#includeint main()
{//打开文件
	FILE* pf = fopen("test.txt", "w");

	if (NULL == pf)
	{perror("fopen");
		return 1;
	}

	//写文件-一行一行写
	fputs("hello\n", pf);
	fputs("worl\n", pf);

	//关闭文件
	fclose(pf);
	pf = NULL;

	return 0;
}

结果展示:
在这里插入图片描述

4)fgets

一行一行的读文件
在这里插入图片描述

使用示范:

#define _CRT_SECURE_NO_WARNINGS
#includeint main()
{//打开文件
	FILE* pf = fopen("test.txt", "r");

	if (NULL == pf)
	{perror("fopen");
		return 1;
	}

	//读文件-一行一行读
	char arr[20] = "#########";
	fgets(arr, 20, pf);//在文件pf中读取一行数据,最多读20个,存入arr中
	printf("%s", arr);
	
	fgets(arr, 20, pf);
	printf("%s", arr);


	//关闭文件
	fclose(pf);
	pf = NULL;

	return 0;
}

结果展示:
在这里插入图片描述

5)fprint

格式化输入函数
在这里插入图片描述
使用示范:

#define _CRT_SECURE_NO_WARNINGS
#includestruct S
{char name[20];
	int age;
	float score;
};

int main()
{struct S s = {"zhangsan", 20, 95.5f };
	//把s中的数据写到文件中
	FILE*pf = fopen("test.txt", "w");
	if (NULL == pf)
	{perror("fopen");
		return 1;
	}
	//写文件
	fprintf(pf, "%s %d %.1f", s.name, s.age, s.score);//将s.name, s.age, s.score写入文件pf

	fclose(pf);
	pf = NULL;
	return 0;
}

结果展示:
在这里插入图片描述

6)fscanf

格式化输出函数
在这里插入图片描述
使用示范:

#define _CRT_SECURE_NO_WARNINGS
#includestruct S
	{char name[20];
		int age;
		float score;
	};
	
	int main()
	{struct S s = {0};
		//把s中的数据写到文件中
		FILE* pf = fopen("test.txt", "r");
		if (NULL == pf)
		{	perror("fopen");
			return 1;
		}
		//读文件
		fscanf(pf, "%s %d %f", s.name, &(s.age), &(s.score));//将pf文件中内容的输入s.name, (s.age), (s.score)
	
	
		printf("%s %d %f\n", s.name, s.age, s.score);
	
		fclose(pf);
		pf = NULL;
		return 0;
	}

结果展示:
在这里插入图片描述

7)fwrite

以二进制形式写入文件
在这里插入图片描述
使用示范:

#define _CRT_SECURE_NO_WARNINGS
#includestruct S
{char name[20];
	int age;
	float score;
};

int main()
{struct S s = {"zhangsan", 20, 95.5f };
	//把s中的数据写到文件中
	FILE*pf = fopen("test.txt", "wb");
	if (NULL == pf)
	{perror("fopen");
		return 1;
	}
	//二进制的写文件
	fwrite(&s, sizeof(s), 1, pf);//将s中一个大小为sizeof(s)的内容写入文件pf

	fclose(pf);
	pf = NULL;
	return 0;
}

结果展示:
在这里插入图片描述

8)fread

二进制形式读取文件
在这里插入图片描述
使用示范:

#define _CRT_SECURE_NO_WARNINGS
#includestruct S
{char name[20];
	int age;
	float score;
};

int main()
{struct S s = {0};
	//把s中的数据写到文件中
	FILE* pf = fopen("test.txt", "rb");
	if (NULL == pf)
	{perror("fopen");
		return 1;
	}
	//二进制的读文件
	fread(&s, sizeof(s), 1, pf);//从文件pf中读取一个大小为sizeof(s)的内容存入s

	printf("%s %d %f\n", s.name, s.age, s.score);

	fclose(pf);
	pf = NULL;
	return 0;
}

结果展示:
在这里插入图片描述

额外补充1:
在这里插入图片描述
使用示范:

#define _CRT_SECURE_NO_WARNINGS
#includeint main()
{int ch = fgetc(stdin);
	fputc(ch, stdout);

	return 0;
}

结果展示:
在这里插入图片描述
额外补充2:
在这里插入图片描述
额外补充3:

文件中不能包含这些字符:/:?"<>|,*

4.随机读写文件 1)fseek

在这里插入图片描述

#includeint main ()
{FILE * pFile;
  pFile = fopen ( "example.txt" , "wb" );
  fputs ( "This is an apple." , pFile );
  fseek ( pFile , 9 , SEEK_SET );//在文件pFile中从SEEK_SET开始读取第九个内容
  fputs ( " sam" , pFile );
  fclose ( pFile );
  return 0;
}
2)ftell

在这里插入图片描述

在这里插入图片描述

#includeint main ()
{FILE * pFile;
  long size;

  pFile = fopen ("myfile.txt","rb");
  if (pFile==NULL) perror ("Error opening file");
  else
  {fseek (pFile, 0, SEEK_END);   // non-portable
    size=ftell (pFile);
    fclose (pFile);
    printf ("Size of myfile.txt: %ld bytes.\n",size);
  }
  return 0;
}
3)rewind

在这里插入图片描述
在这里插入图片描述

#includeint main ()
{int n;
  FILE * pFile;
  char buffer [27];

  pFile = fopen ("myfile.txt","w+");
  for ( n='A' ; n<='Z' ; n++)
    fputc ( n, pFile);
  rewind (pFile);
  fread (buffer,1,26,pFile);
  fclose (pFile);
  buffer[26]='\0';
  puts (buffer);
  return 0;
}

欢迎斧正,如有疑惑可私信或评论,会尽力解答,大家一起加油啊!

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站标题:文件操作(基础知识c语言详解)-创新互联
浏览地址:http://pwwzsj.com/article/dgossh.html