20201130-C语言-文件-基础知识

文件

1C语言中的文件

  • 程序文件
    • 源文件
    • 目标文件
    • 可执行文件
  • 数据文件
    • 文本文件,ASCII字符形式,可以对字节里的二进制进行编码,方便人的理解
    • 二进制文件,机器直接用的文件

2文件缓冲区

  • ANSIC 标准采用“缓冲文件系统”处理的数据文件的
    • 所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在 使用的文件开辟一块“文件缓冲区”。
      • 从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘 上。
        • CPU处理和IO读写之间,有速度差异,不然,CPU就会等待【浪费】
        • 从CPU到文件的两个方向:CPU读,CPU写
        • 文件,本质上是磁盘上的数据,即外围设备中的数据
        • 缓冲区思想 == 缓冲带 == 缓冲池
        • 类似的应用:打印机缓冲,
        • 目的:利用中间地带,缓解速度矛盾,提高资源利用率
      • 如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐 个地将数据送到程序数据区(程序变量等)。
      • 缓冲区的大小根据C编译系统决定的(看不懂再看下面)
        • 这就相当于你嗑瓜子,垃圾桶离你很远【必须的,如办公室里不能放这个桶,你又在办公室里】的时候,你难道要吃一个跑过去扔一个吗?那么我们就是嗑一把瓜子后,把瓜子皮一次送往垃圾桶,而文件缓冲区就相当于你聚瓜子皮的地方;
        • 【某个位置】,即聚皮的地方,即缓冲区
        • CPU写数据时,把数据先组织好,放在内存【某个位置】中,等到满时或是完时,内存一次写到硬盘中。
        • CPU读数据时,把数据从磁盘读入,先组织好存放在内存【某个位置】中,等到满时或是完时,CPU一次读入

3基本过程

3.1常见操作

  • 打开 fopen
  • 操作 write/read
  • 关闭 fclose
// 0 文件指针准备
FILE* fp;
// 1 打开文件
FILE * fopen ( const char * filename, const char * mode ); 
FILE* fp=fopen("e:/text.txt","r");
// 2 处理
// n 关闭文件
int fclose ( FILE * stream );
fclose(fp);

3.2对fopen的补充说明

1.如果文件打开成功,fopen()函数将返回给文件的文件指针,以后就可以通过该文件指针来对文件进行各种操作,而不用再使用文件名。

2.如果文件打开失败,fopen()函数返回空指针NULL.

3.可以通过判断fopen()函数的返回值来确定文件是否正常打开

if(fp=fopen("filename","r")==NULL)
{
    printf("Can not open this file!\n");
    exit(0)}

3.3文件的关闭

  • 使用完文件后应及时地对文件进行关闭,及时关闭文件的理由至少有以下两点:
    • 使用缓冲文件系统时,如果数据缓冲区未满而又不关闭文件就退出程序的运行,则会造成数据缓冲区内的数据丢失。
    • 一个系统内能够同时打开的文件有一定的数量限制。如果不及时地关闭已经不使用的文件,就可能造成打开其他文件时出错。
函数原型:int fclose( FILE *stream );  
调用形式:fclose(文件指针);  
函数功能:将与指定文件指针相关联的文件关闭。   
    fclose函数正常关闭了文件,返回0,否则返回EOF(-1)

说明:

1.该函数用于关闭使用fopen()函数打开的文件,一般程序在这之前打开了几个文件,就必须调用fclose()关闭几个文件。

2.标准设备文件stdin、stdout和stderr由系统自动打开,系统会自动关闭

3.函数正常关闭文件后返回值为0,出错则返回符号常量EOF(值为-1)

4.若文件关闭后又想再次对这个文件进行操作,需要再一次使用fopen()函数打开文件。

3.4文件尾检测

  • 程序中需要判断文件是否处理完成,即文件内部记录指针是否已移动到了文件尾标志处。
  • EOF(仅用于文本文件)
    • 由于文本文件中任何字符的编码均不是-1,可以用-1表示文本文件的文件尾标志,系统中用符号常量EOF来表示。在输入流中表示为ctrl+z。
  • feof(pf)
    • ANSI C提供了一个测试文件状态的函数feof(pf),当文件未结束时feof函数的值为0,否则为非0值。
    • 使用函数feof来判断文件是否结束既可用于文本文件,还可用于二进制文件。
    • 这个方法,会多读一次文件。

4对单个文件的操作方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LQfodMW4-1607311260680)(20201130-C语言-文件.assets/image-20201130121624645.png)]**

4.1单字符输入函数fgetc

  • 函数原型:int fgetc(FILE *stream );
  • 函数调用:ch=fgetc(fpt); //注意,ftp和ch分别为已经定义的文件指针变量和字符变量
  • 函数功能:从指针变量fpt相关联的文件中读取一个字符并将其赋给字符型变量ch;执行函数时遇文件结束符或在执行中出错时返回值为EOF(-1)。

示例:

  • 功能:从键盘输入一个文本文件的名称,并将其内容显示在屏幕上。

  • 解释:

    • 1.文件名一般啊包含为多个字符的字符串,可以定义一个字符数组filename进行存放。
    • 2.要从文件中读取内容,fopen()函数的打开方式可设置为“r".
    • 3.文件打开后可以使用fgetc()函数一个一个的读取字符,然后使用putchar将读到的字符显示到屏幕上,知道文件读完为止。
    • 4.由于fgetc()函数遇到文件尾时返回EOF,因此可构建一个while循环判断文件是否读完。

程序代码如下:

#include <stdio.h>
#include <stdlib.h>
void  main()
{
	FILE *fp;
	char ch, filename[50];
	printf("请输入文件名:");
	gets(filename);
	if ((fp=fopen(filename, "r")) == NULL)  //打开文件
	{	
		printf("打开文件失败!\n");
		exit(0);
	}
	while ((ch = fgetc(fp)) != EOF)  //检测文件读取是否达到尾部
		putchar(ch);   //输出到屏幕上
	fclose(fp);   //关闭文件
	system("pause");

字符读取函数fgetc()可从文件数据流中一次读取一个字符,然后读取光标移动到下一个字符,并逐步将文件的内容读出。如果字符读取成功,则返回所读取的字符,否则返回EOF(end of file)。EOF是表示数据结尾的常量,真值为-1。另外,要判断文件是否读取完毕,可利用feof()进行检查。未完返回0,已完返回非零值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值