命名

为标识一个文件,每个文件都必须有一个文件名,其一般结构为:主文件名[.扩展名] 文件命名规则需遵循操作系统的约定,扩展名代表了文件的类型。

文件分类

可以从不同的角度对文件进行分类

  1. 根据文件的内容,可分为程序文件和数据文件,程序文件又可分为源文件,目标文件和可执行文件。
  2. 根据文件编码方式,可分为ASCII码文件和二进制文件。
    ASCII码文件
    也称文本文件、TEXT文件,如.txt,.c,.h等 文件内容是可打印字符。用一个字节来存储一个字符,存放的是对应字符的ASCII码。
    二进制文件
    如.exe,.doc, .mp3, .jpg等文件。
    优点:1)二进制文件是把内存中的数据,原样输出到磁盘文件中,中间不做任何处理,这样可以节省转换时间。2)比文本文件小很多。3)有些数据不容易被表示为字符
    缺点:二进制文件虽然也可在屏幕上显示,但其内容人无法读懂。必须使用专用的软件来打开。
    整数234的存储
    ASCII文件:00110010 00110011 00110100
    二进制文件:00000000 00000000 00000000 11101010
  3. 根据文件的组织形式,可分为顺序存取文件和随机存取文件。
    顺序存取文件(Sequential Access File)  
    简称“顺序文件”,数据写入文件的方式是后输入的数据放在以前输入数据的后面,按照数据的先后次序一个接一个的放。若要读取数据,也是由第一条记录开始读取。
    这种数据文件每一条记录的长度都可以不一样,虽然比较节约空间,可是每次查询都必须从头开始找起,越在后的数据找寻时间就越久。
    随机存取文件(Random Access File)
    简称“随机文件”,每一条记录在存储介质中所占的长度都相同。数据存入存储介质的方式没有先后次序的限制;由于每个记录占用的长度固定,查询时只要告知第几个记录便可利用公式算出该记录的位置,快速地存取那个记录。所以不管记录在前还是在后,找寻的时间都大约相同。
    文件基础
    都是100字节

随机文件中记录的长度必须以长度最长的那条记录为基准。因此当每个记录实际长度差异很大时,使用随机文件会比较浪费存储介质空间

** 如何判断使用什么文件**

如果要频繁操作文件中的记录(修改、插入、删除),则应该使用随机文件的方式(便于定位记录的位置);
如果文件中的信息基本不修改,则应该使用顺序文件的方式(占用存储空间少)。

  1. 从用户角度,可分为普通文件和设备文件。
    普通文件是指存放在外部存储介质上的数据集合。
    设备文件是指与主机相连的各种外部设备,如显示器、键盘、打印机等。操作系统中为了处理的统一和概念的简化,把外部设备也作为文件来进行管理,对他们的输入输出等同于对普通文件的读和写。通常,显示器定义为标准输出文件,键盘定义为标准输入文件。

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

  3. 读写文件
    读文件:将文件中的数据传送到计算机内存。
    写文件:将计算机内存中的数据传送到文件。

  4. 文件和流
    不论是普通文件还是设备文件,C语言把每个文件一律都看作是一个有序的字节流,以字节为单位进行操作处理。
    文件基础
    文件的结束:以文件结束标志(end-of-file marker)结束,或者在特定字节号处结束(字节号记录在系统维护和管理的数据结构中)
    是文件和程序之间通讯的通道。当打开一个文件时,该文件就和某个流关联起来了,当关闭文件时,将会取消流和文件的连接。
    执行程序时会自动打开三种文件以及和这三种文件关联的流-标准输入流、标准输出流和标准错误流。
    ** int fflush(FILE * fPtr);**
    清理一个文件的缓冲区,fflush()会强迫将缓冲区内的数据写回参数stream 指定的文件中。
    参数fPtr是打开文件时由fopen()函数返回的FILE指针。
    对于以写方式打开的文件,函数将缓冲区中的数据写入磁盘文件。
    对于以读方式打开的文件,函数将缓冲区清空。
    函数如果运行成功则返回0,如果失败则返回EOF(也就是-1)。
    重要的是:
    fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃[非标准]。
    fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。
    printf("…");后面加fflush(stdout);可提高打印效率。
    int flushall(void);
    用于清理所有文件的缓冲区。
    返回打开着的文件个数。
    如下代码:

    #include <stdio.h>
    int main(void) {
    FILE *stream;
    /* create a file */
    stream = fopen("DUMMY.FIL", "w");
    /* flush all open streams */
    printf("%d streams were flushed.\n",_flushall());
    /* close the file */
    fclose(stream);
    return 0;
    }
    

文件类型FILE

C系统为了处理文件,给每个打开的文件都在内存中开辟一片区域,用于存放文件的有关信息(如缓冲区位置、缓冲区大小、缓冲区中当前所指向的字节位置、文件状态–读还是写、是否已经到达文件结尾等等)。
为了得到这片内存,需要在程序中定义一个类型为FILE的结构变量。FILE类型由系统定义(见<stdio.h>)
注意:结构类型名“FILE”必须大写。
文件的操作都应该遵循: 打开文件->读或写文件->关闭文件
标准输入流指针:stdin
标准输出流指针:stdout
标准错误流指针:stderr
对文件进行操作之前,必须先打开该文件;使用结束后,应立即关闭,以免数据丢失。
fPtr = fopen (“clients.dat”,“w”);//文件和程序在同一目录
fPtr = fopen (“C:\temp\clients.dat”,“w”);
//文件绝对路径。注意:路径中必须是“\”而不是“\”
打开文件的操作:
1、创建FILE类型记录;
2、分配缓冲区。
3、拷贝磁盘上的FCB到内存的打开文件表。
4、将缓冲区首地址、文件控制块(FCB)在打开文件表中的下标写入FILE记录。
文件控制块(FCB):是操作系统为管理文件而设置的数据结构,存放了为管理文件所需的所有有关信息(文件属性)。是文件存在的标志。操作系统要依靠FCB中的数据完成对文件的读或写操作。FCB是操作系统为管理文件而设置的数据结构,存放了为管理文件所需的所有有关信息(文件属性)。是文件存在的标志。操作系统要依靠FCB中的数据完成对文件的读或写操作。
打开的方式文件基础
文件中有一个“文件位置指针”,指向下一次读写操作所在字节的整数值。每次读写1个(或1组)数据后,系统自动将文件位置指针移动到下一个读写位置上。文件基础
打开文件时位置指针的起始位置与打开文件的方式有关:-以“r”、“w”方式打开文件,位置指针指向文件头。-以“a”方式打开文件,位置指针指向文件尾
文件位置指针相关的3个函数
rewind():文件位置指针指向文件头,把“文件位置指针”重新定位到文件的起始位置(即0字节处)。
fseek():修改文件位置指针使其指向任一字节处
将指定文件的位置指针,从参照点开始,移动指定的字节数(位移量)。
(1)参照点(3种取值):
SEEK_SET ──值为0,表示文件头
SEEK_CUR──值为1,表示当前位置
SEEK_END──值为2,表示文件尾
(2)位移量:以参照点为起点,向文件尾方向(位移量>0)或文件头方向(位移量<0)移动的字节数。在ANSI C标准中,要求位移量为long int型数据。 如: fseek(fPtr,10, SEEK_SET)。文件基础
ftell():返回文件当前位置的函数,返回文件位置指针的当前位置(用相对于文件头的位移量表示)。 如果返回值为-1L,则表明调用出错。例如:
offset=ftell(fp);
if(offset= =-1L)
printf(“ftell() error\n”);

蜕变吧,德林恩宝!!      

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-11-16
  • 2021-04-26
  • 2021-07-07
  • 2021-12-29
  • 2021-08-26
猜你喜欢
  • 2021-12-18
  • 2021-08-23
  • 2021-08-22
  • 2021-10-05
  • 2021-09-13
  • 2021-10-04
  • 2022-01-18
相关资源
相似解决方案