C20第11章 文件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文本文件与二进制文件的特点
字符型编码的码长通常固定, ASCII码的码长1个字节, 字符型编码的码长通常固定,如ASCII码的码长1个字节,因 码的码长 此,文本文件存储的数据容易解码。 文本文件存储的数据容易解码。 当存储一个整数3和一个双精度数3.3时 当存储一个整数3和一个双精度数3.3时,二进制文件存储数 3.3 据 当存储一个双精度数3.3和一个整数3 当存储一个双精度数3.3和一个整数3时,二进制文件存储数 3.3和一个整数 据 显然,二进制文件存储的数据不容易解码。 显然,二进制文件存储的数据不容易解码。只需按照字符编 码的格式解码即可查看文本文件的内容; 码的格式解码即可查看文本文件的内容;只有知道了相关数据 的编码结构,才能正确地查看二进制文件的内容。 的编码结构,才能正确地查看二进制文件的内容。
fopen函数常见的使用形式为:
文件的当前位置指针
每个打开的文件都有一个当前位置指针用于指示文件中 存取数据的地址。对文件进行存取操作时, 存取数据的地址。对文件进行存取操作时,该指针会根据存 取的数据量自动调整以指向新的位置。 取的数据量自动调整以指向新的位置。 库函数ftell(int ftell(FILE *streem))可以输出文件 *streem)) 库函数ftell( ftell 的当前位置指针与文件开始处的偏移字节数。出错时ftell 的当前位置指针与文件开始处的偏移字节数。出错时ftell 函数的返回值为-1。 函数的返回值为printf("%d\ ftell(fp);的输出 printf("%d\n", ftell(fp);的输出 ? 特别提示:文件的当前位置指针与FILE结构型变量中与缓 特别提示:文件的当前位置指针与FILE结构型变量中与缓 FILE 冲区相关的当前位置指针不同。 冲区相关的当前位置指针不同。
新编C语言程序设计教程
清华大学出版社
周二强
zeq@ 软件学院
计算机科学与工程系
配套视频: 配套视频: 博客: 博客:/stunt
第11章 文件 11章
11. 11.1 C语言文件概述 11. 11.2 文件打开与关闭
11.2.1 文本文件与二进制文件 11.2.2 (新建后)打开文件 11.2.3 文件关闭 11.3.3 fprintf 函 数 和
Windows系统下的C文件
Windows系统中用 和'\n'两个字符编码键盘上的回车 系统中用'\r'和 两个字符编码键盘上的回车 系统中用 语言中只用一个字符'\n'编 (Enter)键即回车换行,而C语言中只用一个字符 编 )键即回车换行, 语言中只用一个字符 码回车键。 码回车键。 为了使Windows系统中的其他程序可以正确显示由 语 系统中的其他程序可以正确显示由C语 为了使 系统中的其他程序可以正确显示由 言程序生成的文本文件,当数据写入文本文件时, 言程序生成的文本文件,当数据写入文本文件时,系统会 把遇到的'\n'自动替换为 和 ;反之, 把遇到的 自动替换为'\r'和'\n';反之,当数据从文本文 自动替换为 件读出时,相连的 和 ( 件读出时,相连的'\r'和'\n'(\r\n)会被自动替换为 。 )会被自动替换为'\n'。
缓冲文件系统
C语言把文件看成字节的序列,即文件中二进制编码数 语言把文件看成字节的序列, 据的最小单位是字节, 据的最小单位是字节,C语言文件被形象地称为字节流或 流式文件。 流式文件。 C语言主要使用缓冲文件系统。所谓缓冲文件系统是指 语言主要使用缓冲文件系统。 使用文件时, 使用文件时,系统自动为每个打开的文件申请一块称为缓 冲区的内存空间, 冲区的内存空间,程序对文件的存取操作通过缓冲区进行 。
文件的使用方式
“r”方式表示read,只读。 “r”方式表示read,只读。 方式表示read "w"方式表示write,只写。 "w"方式表示write,只写。其实该方式更像是新建文件 方式表示write 。使用"w"方式时,fopen函数会新建一个以指定名字命名 使用"w"方式时,fopen函数会新建一个以指定名字命名 "w"方式时 的文件。如果指定的目录中已存在同名的文件,则fopen 的文件。如果指定的目录中已存在同名的文件, 函数会先删除该文件,再新建文件。 "w"方式打开的文 函数会先删除该文件,再新建文件。用"w"方式打开的文 件没有任何数据,并且该文件只能写入数据, 件没有任何数据,并且该文件只能写入数据,而不能读取 其中的数据。 其中的数据。 "a"方式表示append,追加。 "a"方式表示append,追加。 方式表示append
return
新建后) 11.2.2 (新建后)打开文件
读写文件之前,需要在程序中打开文件。 读写文件之前,需要在程序中打开文件。如果文件已存 在,则可以直接打开;如果文件不存在,则需要新建一个 则可以直接打开;如果文件不存在, 文件后再打开它。 文件后再打开它。 打开文件的操作可以使用库函数fopen。有关文件操作 打开文件的操作可以使用库函数fopen。 fopen 的库函数通常位于标准输入输出库中。 的库函数通常位于标准输入输出库中。 fopen函数的首部: fopen函数的首部: 函数的首部 File * fopen(const char *filename, const char *mode)
C语言文件概述 11.1 C语言文件概述
计算机的存储器分为内存和外存。 计算机的存储器分为内存和外存。 如果需要把程序中的数据保存下来, 如果需要把程序中的数据保存下来,则数据应存储到外 存中。 存中。 外存中的数据通常以文件为单位进行管理,文件是一批 外存中的数据通常以文件为单位进行管理, 数据的集合,以文件名标识。 数据的集合,以文件名标识。程序运行时可以先在外存中 新建一个文件,再把欲保存的数据存储到该文件中, 新建一个文件,再把欲保存的数据存储到该文件中,即外 存中,这样文件中的数据就可以长期保存了。 存中,这样文件中的数据就可以长期保存了。当需要使用 文件中的数据时,在程序中打开相关文件, 文件中的数据时,在程序中打开相关文件,然后就可读取 并使用其中的数据了。 并使用其中的数据了。
文本文件与二进制文件的特点
在程序中使用文本文件的数据时, 在程序中使用文本文件的数据时,只需把相关数据赋值 给字符型变量即可。如果要把文本文件中的一串字符如 给字符型变量即可。如果要把文本文件中的一串字符如" 16705"看成整数16705并赋值给短整型变量i 16705 看成整数16705并赋值给短整型变量i,则显然需进 看成整数16705并赋值给短整型变量 行必要的转换。 行必要的转换。 二进制文件中存储的是整数16705的补码, 二进制文件中存储的是整数16705的补码,在程序中把 16705的补码 它赋值给短整型变量i时无需转换。 它赋值给短整型变量i时无需转换。
return
11.2.1 文本文件与二进制文件
程序中有短整型变量i 其值为16705,变量i 程序中有短整型变量i,其值为16705,变量i的值可以 16705 用两种格式存储到文件中。 用两种格式存储到文件中。 第一种:把变量i的值变为由 1 、 6 、 7 、 0 、 5 组成 第一种:把变量i的值变为由'1'、'6'、'7'、'0'、'5'组成 的字符串,然后把这些字符的ASCII码存储到文件中;第 的字符串,然后把这些字符的ASCII码存储到文件中; ASCII码存储到文件中 二种:直接把变量i在内存中的补码形式0100 二种:直接把变量i在内存中的补码形式0100 0001 0100 0001存储到文件中。 0001存储到文件中。 存储到文件中 根据存储数据的编码格式可以把文件分为文本文件和二 进制文件。 进制文件。所谓文本文件是指文件中数据的编码格式为字 符型。 符型。所谓二进制文件是指文件中数据的编码格式为其它 形式的二进制编码。 形式的二进制编码。
fopen函数
fopen函数的首部: fopen函数的首部: 函数的首部 File * fopen(const char *filename, const char *mode) 其中,第一个参数为文件名, 其中,第一个参数为文件名,其常见形式为 "c:\\csample\\text.txt",仅有文件名"text.txt"时表示该 "c:\ csample\ text.txt",仅有文件名"text.txt"时表示该 "text.txt" 文件与源文件位于同一个目录中。 文件与源文件位于同一个目录中。第二个参数为文件的使用方 式,常用的方式有"r"、"w"和"a"三种。当成功地打开文件时 常用的方式有"r"、"w"和"a"三种。 "r" 三种 ,函数返回指向与指定文件相关联的FILE结构型变量的指针。 函数返回指向与指定文件相关联的FILE结构型变量的指针。 FILE结构型变量的指针 当找不到指定的文件或出现错误时,函数返回NULL。 当找不到指定的文件或出现错误时,函数返回NULL。 NULL
fscanf函数 11.3.4 fwrite 函 数 和 fread 函数
11.4 标准设备文件 11. 11. 11.5文件随机读写
11.5.1 移动文件当前位置指 针 11.5.2 既可读又可写文件
11. 11.3 文件读写
11.3.1 fputc函数和fgetc函数 11.3.2 文件结束状态
return
11.2.3 文件关闭
当不再使用时,应该关闭文件。如果不关闭文件, 当不再使用时,应该关闭文件。如果不关闭文件,则 库函数fclose用于关闭文件,如语句fclose(fp);就把 库函数fclose用于关闭文件,如语句fclose(fp);就把 fclose用于关闭文件 fclose(fp); 与FILE型指针变量fp相关的文件关闭。 FILE型指针变量fp相关的文件关闭。 型指针变量fp相关的文件关闭 fclose函数在关闭文件时会根据需要把缓冲区中的数据 fclose函数在关闭文件时会根据需要把缓冲区中的数据 保存到文件中,然后释放缓冲区。fclose函数顺利地执行 保存到文件中,然后释放缓冲区。fclose函数顺利地执行 了关闭操作时返回0 否则返回EOF。EOF是一个宏, 了关闭操作时返回0,否则返回EOF。E义为stdio.h中被定义为-1。 中被定义为
FILE结构型
程序中文件的相关信息被保留在FILE结构型变量中。 程序中文件的相关信息被保留在FILE结构型变量中。 FILE结构型变量中 C语言标准没有详细规定FILE结构型,只描述了它记录 语言标准没有详细规定FILE结构型, FILE结构型 的一些信息,因此,不同编译系统定义的FILE结构型不尽 的一些信息,因此,不同编译系统定义的FILE结构型不尽 FILE 相同。为了程序的可移植性,不要编写使用FILE结构型成 相同。为了程序的可移植性,不要编写使用FILE结构型成 FILE 员的代码。 员的代码。 通常FILE结构型记录的信息有:内存缓冲区的地址、 通常FILE结构型记录的信息有:内存缓冲区的地址、内 FILE结构型记录的信息有 存缓冲区的大小、缓冲区当前位置指针的指向位置、 存缓冲区的大小、缓冲区当前位置指针的指向位置、缓冲 区中剩余的(可用的)字节数和文件的读写模式等。 区中剩余的(可用的)字节数和文件的读写模式等。 VC6.0中FILE结构型在stdio.h中定义。 VC6.0中FILE结构型在stdio.h中定义。 结构型在stdio.h中定义
文本文件?二进制文件? 文本文件?二进制文件?
一个文件究竟是文本文件还是二进制文件呢? 一个文件究竟是文本文件还是二进制文件呢? 用"r"、"w"或"a"方式打开文件时,文件是“文本”格 "r"、"w"或"a"方式打开文件时,文件是“文本” 方式打开文件时 式的; 式的; 需用"rb"、"wb"或"ab"方式打开文件时,文件是“二进 需用"rb"、"wb"或"ab"方式打开文件时,文件是“ "rb" 方式打开文件时 制”格式。 格式。 一个文件既可用“文本”格式打开,又可用“二进制” 一个文件既可用“文本”格式打开,又可用“二进制” 格式打开, 格式打开,两者最大的区别在于存取数据时是否自动进行 '\n'与'\r''\n'的互换。 \ 与 \ \ 的互换 的互换。