文件

数据的结构层次

数据库(database):一组相关的文件集合。如结构化数据库,非结构化数据库。
数据库管理系统:DataBase Management System(DBMS),方便对数据的检索、更新、备份等操作
在这里插入图片描述

数据分类:

结构化数据:即行数据,有结构,可以存储在关系数据库中。如学生的信息是结构化数据,包括姓名、年龄、籍贯、身高等。
非结构化数据:数据没有明确的结构,如全文文本、图像、声音、视频等。
半结构化数据:介于完全结构化和完全无结构化数据之间的数据,如HTML文档。
在这里插入图片描述

文件概述

程序设计语言中的文件,指的是这些外部数据和外部设备

文件是为了某种目的系统地把数据组织起来而构成的数据集合体

为了处理的统一和概念的简化,操作系统把外部数据(磁盘文件)、外部设备(输入输出设备)一律作为文件来进行管理

文件存取过程

数据以二进制形式存储。
程序读取数据时,首先要知道数据的类型,才能正确解析出数据。
如果以类型A的二进制形式存入,却当作类 型B读出,就乱套了。所以,读文件前,必须确切知道文件每一字节的确切类型和含义, 所以才有标准的mp3、bmp、jpg等文件格式。

文件分类

在这里插入图片描述
ASCII码文件示例
在这里插入图片描述

文件的作用

(1)同时处理大量的数据;
(2)文件中的数据可以多次重复使用;
(3)文件可以永久保存,其中的数据不会因为应用程序的结束或关机而消失;
(4)文件中的数据可以为多个应用程序所共享;
(5)便于网络传输。

读文件与写文件(数据在内存和文件之间的传送)

c语言中的文件==有序的字节流,以字节为单位处理

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

文件的结束

:以文件结束标志EOF(end-of-file marker)结束,或者在特定字节号处结束(字节号记录在系统维护和管理的数据结构中)

ANSIC的缓冲文件系统

在这里插入图片描述

缓冲区操作函数

** int fflush(FILE *fPtr); **
清理一个文件的缓冲区。
参数fPtr是打开文件时由fopen()函数返回的FILE指针。
对于以写方式打开的文件,函数将缓冲区中的数据写入磁盘文件。
对于以读方式打开的文件,函数将缓冲区清空。
函数如果运行成功则返回0,如果失败则返回EOF(也就是-1)。
int flushall(void);
用于清理所有文件的缓冲区。
返回打开着的文件个数。

文件类型FILE

在这里插入图片描述

FILE声明示例
typedef struct  {
        short   level;  /* fill/empty level of buffer */
        unsigned     flags;  /* File status flags    */
        char     fd;             /* File descriptor      */
        unsigned char   hold;  /* Ungetc char if no buffer */
        short    bsize;  /* Buffer size  */
        unsigned char   *buffer;  /* Data transfer buffer */
        unsigned char   *curp;  /* Current active pointer */
        unsigned     istemp;  /* Temporary file indicator */
        short     token;  /* Used for validity checking */
} FILE; 

对文件的操作

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

文件的打开——fopen()函数

在这里插入图片描述
文件控制块(FCB):是操作系统为管理文件而设置的数据结构,存放了为管理文件所需的所有有关信息(文件属性)。是文件存在的标志。操作系统要依靠FCB中的数据完成对文件的读或写操作。
包含内容:文件名,文件号,用户名,文件地址,文件长度,文件类型,文件属性,共享计数,文件的建立日期,保存期限, 最后修改日期,最后访问日期,口令,文件逻辑结构,文件物理结构等.
过程如下:
在这里插入图片描述

打开文件的操作方式

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

文件的关闭——fclose()函数

在这里插入图片描述

位置指针与文件定位

“文件位置指针”,指向下一次读写操作所在字节的整数值。每次读写1个(或1组)数据后,系统自动将文件位置指针移动到下一个读写位置上。
在这里插入图片描述

文件位置指针相关的3个函数:
位置指针复位函数rewind()

1.用法:void rewind(FILE * stream);
2.功能:把“文件位置指针”重新定位到文件的起始位置(即0字节处).

随机读写与fseek()函数

文件既可以顺序读写,也可以随机读写,关键在于控制文件的位置指针。 所谓顺序读写是指,读写完当前数据后,系统自动将文件的位置指针移动到下一个读写位置上。
所谓随机读写是指,读写完当前数据后,可通过调用fseek()函数,将位置指针移动到文件中任何一个地方。
在这里插入图片描述

返回文件当前位置的函数ftell()

在这里插入图片描述

文件的读写操作

一、读/写文件中的一个字符
fputc()

在这里插入图片描述
fputc(c,stdout)等价于putchar© ,将变量c输出到标准输出设备上(一般为屏幕)。

fgetc()

在这里插入图片描述
ch=fgetc(stdin)等价于ch=getchar(),从标准输入流(通常是键盘)中读取一个字符

读文件时如何判断文件是否读到文件尾——库函数feof()

在对ASCII码文件执行读入操作时,如果遇到文件尾,则读操作函数返回一个文件结束标志EOF(其值在头文件stdio.h中被定义为 -1)。

在对二进制文件执行读入操作时,必须使用**库函数feof()**来判断是否遇到文件尾。
在这里插入图片描述

文本文件复制的通用处理

在这里插入图片描述
//例子
将键盘输入的字符串存储到指定文本文件
在这里插入图片描述
在这里插入图片描述

二、读/写一个字符串──fgets()和fputs()

在这里插入图片描述
在这里插入图片描述
注:
1、执行fgets语句时,程序请求键盘输入。如果用户输入CTRL+Z,则文件结束指示符被设置,此时feof函数返回1
2、fgets如果遇到文件结束符并且没有字符读入数组,则数组内容不变

总结读文件操作

在这里插入图片描述

三、 对文件进行格式化读/写──fscanf()和fprintf()函数
再谈scanf函数

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

四、读/写一个数据块(二进制文件)──fread()和fwrite()

在这里插入图片描述
在这里插入图片描述
fread和fwrite函数读写二进制文件,因为二进制文件存储记录时每一个记录是等长的

顺序存储文件

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

随机存取文件的操作

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值