C语言中文件怎么操作呢

本文介绍了C语言中关于文件的操作,包括文件的性质、分类、存储方式、缓冲区概念、文件类型指针的使用、文件打开与关闭、以及顺序读写数据文件的方法。重点讲述了fopen、fclose、fread和fwrite等函数的使用。
摘要由CSDN通过智能技术生成

程序设计中,文件主要用到两种 程序文件 (包括源程序文件.c 目标文件.obj 可执行文件.exe)和数据文件
所谓文件是指存储在外部介质上数据的集合

  输入输出是数据传送的过程,数据像流水一样从一处流向另一处,因此常将输入输出形象地称为流,即数据流

输入 是数据从文件流向计算机内存
输出 是数据从计算机流向文件

一个文件要有唯一的文件标识,以便用户识别和引用
文件标识包括三部分:文件路径 文件名主干 文件后缀

  • 后缀一般用来表示文件的性质:如doc是Word生成的文件 TXT是文本文件 dat 是数据问价
  • c C语言源程序文件 cpp C++ 源程序文件

文件的分类
根据数据的组织形式可以把文件分为ASCII文件二进制文件

  • 数据在磁盘上是怎么存储的,字符一律以ASCII形式存储,数值型数据既可以用ASCII形式存储,也可以用二进制存储

  (1)用ASCII形式输出是字节与字符一一对应,便于对字符进行逐个处理,也便于输出字符,但占用存储空间较多,而且花费转换事件
  (2)用二进制输出数值,可以节省外存空间和转换时间,把内存中的内容原封不动的输出到磁盘,如果程序中有的中间数据需要保存在外部介质上,以便
需要时在输入到内存,一般用二进制比较方便
在这里插入图片描述

文件缓冲区
  所谓缓冲文件系统是值系统自动地在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区

从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘去。如果从磁盘向计算机读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区,然后在从缓冲区逐个的将数据送到程序数据区

在这里插入图片描述

文件类型指针
  每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件的有关信息(文件名,文件状态及文件当前位置)
这些信息保存在一个系统声明的结构体变量中,取名为FILE
例: FILE f1;
定义结构体变量f1,用来存放一个文件的有关信息,这些信息是在打开文件时由系统根据文件的情况自动放入的,用户不必过问。

用fopen打开数据文件或创建一个新的数据文件
fopen(文件名,使用文件方式);
通常将fopen的函数返回值赋给一个指向文件的指针变量
使用文件方式
在这里插入图片描述

  • 打开方式为“r”时,该文件必须存在,只能用于向计算机输入而不能用作向该文件输出数据

  • “w”,只能向该文件写入,而不能向计算机输入,若要打开的文件不存在,就以指定的文件名创建新文件,若原来已经存在该文件名命名的文件,打开文件前先将该文件删去,然后重新建立新文件

返回值:如果文件顺利打开,返回指向该流的文件指针,失败则返回NULL

关闭文件fclose()函数
fclose(文件指针)
文件使用完应及时关闭,防止再被误用
返回值: 如果流成功关闭,该方法返回零,如果失败,则返回EOF

顺序读写数据文件
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>

int main()
{
	FILE *fp;
	char ch, filename[10];
	printf("请输入所用的文件名:");
	scanf("%s", filename);
	if ((fp = fopen(filename, "w")) == NULL)
	{
		printf("无法打开此文件\n");
		exit(0);
	}
	ch = getchar();
	printf("请输入一个准备存储到磁盘的字符串:");
		ch = getchar();
	while (ch != '#')
	{
		fputc(ch, fp);
		putchar(ch);
		ch = getchar();
	}
	fclose(fp);
	putchar(10);
	return 0;
}

向文件读写一个字符串
在这里插入图片描述

读写文件数据块fread() fwrite()函数
用于整块数据读写的函数
函数原型:
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);

函数参数:

  • buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。
  • size:要读写的字节数;
  • count:要进行读写多少个size字节的数据项;
  • fp:文件型指针

返回值随着调用格式的改变而改变
调用格式:fwrite(buf,sizeof(buf),1,fp); 成功写入返回值为1(即count)
调用格式:fwrite(buf,1,sizeof(buf),fp); 成功写入则返回实际写入的数据个数(单位为Byte)
调用格式:fread(buf,sizeof(buf),1,fp); 读取成功时:当读取的数据量正好是sizeof(buf)个Byte时,返回值为1(即count),否则返回值为0(读取数据量小于sizeof(buf))
调用格式:fread(buf,1,sizeof(buf),fp); 读取成功返回值为实际读回的数据个数(单位为Byte)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值