C语言文件操作

目录

1.文件定义

2.文件名

3.文件的打开和关闭

3.1:文件指针

3.2:文件的打开和关闭

3.2.1以写的形式打卡文件

4.文件的顺序读写

4.1:字符的输入,输出函数

4.1.1:输出函数

4.1.2:输入函数

4.2:文本行输入,输出函数

4.2.1:文本行输出函数。

4.2.2:文本行输入函数

4.3:其他输入输出函数 

5.文件的随机读写

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

 5.2:ftell----返回流的位置指示器的当前值。(计算文件指针相对于起始位置的偏移量)

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

6.文件读取结束的判定

6.1:feof-----判断遇到文件末尾而结束

 6.2:文本文件的例子


1.文件定义

硬盘上的文件是文件。但在程序设计中,我们一般谈的文件有两种:程序文件,数据文件。(从文件功能的角度来分类的)

程序文件:包括源程序文件(后缀为.c),目标文件(后缀为,obj),可执行程序(后缀为,exe)。

数据文件:文件内容是程序运行时读写的数据,比如程序运行需要从中读取数据的文件或者输出内容的文件。

2.文件名

文件名包含3部分:文件路径+文件名主干+文件后缀

例如;c:\(c盘)code(目录)\test.txt(文件名)

3.文件的打开和关闭

3.1:文件指针

文件类型指针,简称文件指针。

每个被使用文件都在内存中开辟一个相应的文件信息区,存放文件名,文件状态及文件当前的位置。这些信息保存在一个结构体变量中。取名FILE。

一般都是通过一个FILE的指针来维护这个FILE结构的变量。

创建FILE*的指针变量。

FILE*pf---------通过文件指针变量能够找到与它关联的文件

3.2:文件的打开和关闭

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

 const char *filename:是文件指针名。

const char *mode是文件的打开方式。

接下来我们来使用一下。

int main()
{
	FILE* pFile=NULL;
	pFile = fopen("hello.txt", "r");
	if (pFile == NULL)
	{
		printf("%s\n",strerror(errno));//strerror 是指向错误编码的指针,errno是错误编码。
	}
	return 0;
}

这是木有创建hello.txt,

 创建hello.txt

说明"r"以读的形式打开,需要一个存在的文件,不然无法运行。 

3.2.1以写的形式打卡文件

写分为只写和追加的两种形式,接下来我先讲只写的。

int main()
{
	FILE* pFile=NULL;
	pFile = fopen("hello.txt", "w");
	if (pFile == NULL)
	{
		printf("%s\n",strerror(errno));//strerror 是指向错误编码的指针,errno是错误编码。
	}

	return 0;
}

注意:

只写的打开,如果没有该文件,会在该路径下创建一个该名的文件,如果文件有内容,下一次,文件内容会被销毁。

追加:

int main()
{
	FILE* pFile=NULL;
	pFile = fopen("hello.txt", "a");
	if (pFile == NULL)
	{
		printf("%s\n",strerror(errno));//strerror 是指向错误编码的指针,errno是错误编码。
	}

	return 0;
}

注意:

如果指定文件不存在,就会出错,如果存在,就会在该文本文件尾添加数据

接下来,大致的讲一下其他的读写方式

"rb":(只读)打开一个二进制文件,如果文件不存在(出错)

"wb"(只写)  打开一个二进制文件,如果文件不存在,建立一个新文件

"ab"(追加)打开一个二进制文件尾添加数据,如果文件不存在,(出错)。

"r+"(读写)打开一个文本文件,如果文件不存在(出错)

"w+"(读写)为了读和写,建立一个新文件,如果文件不存在,建立一个新文件。

"a+"(读写)打开一个文件,在文件尾进行读写,如果文件不存在,建立一个新文件

"rb+"(读写)打开一个二进制文件,如果文件不存在(出错)

"wb+"(读写)建议一个新文件,如果文件不存在,建立一个新文件。

"ab+"(读写)打开一个二进制文件,在文件尾进行读和写,如果文件不存在,建立一个新的文件。

4.文件的顺序读写

4.1:字符的输入,输出函数

4.1.1:输出函数

c 从键盘输出,到hello.txt文本中。

注意:

fputc的返回值是int ,是一个字符,一个字符的输出。

 

4.1.2:输入函数

fgetc 从hello.txt文本输入到屏幕上。

fgetc的返回值是int  一个一个字符的输入。

int main()
{
	FILE* pf= fopen("hello.txt", "r");
	if (pf== NULL)
	{
		printf("%s\n", strerror(errno));
		return 1;
	}
	int ch = 0;
	while ((ch = fgetc(pf)) != EOF)
	{
		printf("%c", ch);
	}
	fclose(pf);
	pf = NULL;
	return 0;
}

 

4.2:文本行输入,输出函数

4.2.1:文本行输出函数。

 const char *str:是你要输出的字符串。

 FILE *stream:是你要输出到的文本。

返回值是int 整形。

 

4.2.2:文本行输入函数

 注意:

char *str:指向在其中复制字符串读取的 chars 数组的指针;

int num:复制到 str 中的最大字符数.

FILE*stream:是文本指针。

4.3:其他输入输出函数 

格式化输入函数:  fscanf            适应所用输入流

格式化输出函数:  fprintf            适应所用输出流

二进制输入:         fread              文件

二进制输出:         fwrite              文件

5.文件的随机读写

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

 

FILE*stream:是文本指针。

long int offset:要从偏移的字节数。

int origin:

SEEK_SET文件开头
SEEK_CUR文件指针的当前位置
SEEK_END文件结尾 *

 用例:

 5.2:ftell----返回的位置指示器的当前值。(计算文件指针相对于起始位置的偏移量)

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

6.文件读取结束的判定

6.1:feof-----判断遇到文件末尾而结束

注意:在文件读取过程中,不能有feof函数的返回值直接用来判断文件的是否结束。

文本文件读取是否结束,判断返回值是否为EOF(fgetc),或者NULL(fgets)。

                                       fgetc判断是否为EOF。

                                       fgets判断返回值是否为NULL。

二进制文件读取结束判断,判断返回值是否小于实际要读的个数。

                                           fread判断返回值是否要小于实际要读的个数。

 6.2:文本文件的例子

int main()
{
	FILE* pf = fopen("hello.txt", "r");
	if (pf == NULL)
	{
		perror("file opening failed");//perror:打印错误消息
		return 1;
	}
	int c = 0;
	while((c = fgetc(pf) )!= EOF)
	{
		putchar(c);
	}
	printf("\n");
	if (ferror(pf))
	{
		puts("I/O error when reading");//文件遇到错误而结束。
	}
	else if (feof(pf))
	{
		puts("end of file reached successfully");//遇到文件尾巴而结束。
	}
	return 0;
}

 

 

 

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值