位置指针与文件定位
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
和二进制文件。他的每一个字节存储一个ASCⅡ码(代表1个字 符)。二进制文件是把内存中的数据,原样输出到磁盘文ቤተ መጻሕፍቲ ባይዱ中。
下一页 返回
12.1 文件概述
2.读文件与写文件 所谓读文件是指,将磁盘文件中的数据传送到计算机内存的
操作。 所谓写文件是指,从计算机内存向盘文件中传送数据的操作。
如图12-2所示。 3.文件类型
int fwrite(void *bu ffer, int size, int count, FILE *fp);
上一页 下一页 返回
12.3 文件的读写操作
(2)功能: fread()\——从fp所指向文件的当前位置开始,一次读入size个
字节,重复count次,并将读入的数据存放到从buffer开始的内存 中;同时将读写位置指针向前移动size*count个字节。其中, buffer是存放读入数据的起始地址(即存放何处)。
(4)有些C编译系统,可能并不完全提供上述对文件的操作方式,或 采用的表示符号不同,请注意所使用系统的规定。
上一页 下一页 返回
12.2 文件的打开与关闭
(5)在程序开始运行时,系统自动打开三个标准文件,并分别定义了 文件指针:
1)标准输入文件——stdin:指向终端输入(一般为键盘)。如果程 序中指定要从stdin所指的文件输入数据,就是从终端键盘上输入 数据。
/*存储到指定文件*/
fclose(fp);
/*重新打开文件,读出其中的字符串,并输出到屏幕上*/
if((fp=fopen(argv[1],”r”))==NULL)
/*打开文件失败*/
{ printf(“can not open this file\n”);
exit(0);
}
fgets(string,strlen(string)+1,fp);
gets(string);
/*借用string数组暂存输入的文件名*/
argv[1]=(char *)malloc(strlen(string)+1); /*给文件名参数申请内存空 间*/
strcpy(argv[1],string);
/*复制文件名到形参中*/
}
if ((fp=fopen(argv[1],”w”))==NULL) /*打开文件失败*/
用的文件开辟一个缓冲区。 从磁盘文件向内存读入数据时,首先将一批数据读入到文件
缓冲区中,再从文件缓冲区将数据逐个送到程序数据区。如图123所示。
从内存向磁盘输出数据时,则正好相反;必须先将一批数据 输出到缓冲区中。待缓冲区装满后,再一起输出到磁盘文件中。 如图12-4所示。
上一页 返回
12.2 文件的打开与关闭
程序运行情况: abcdefg1234567@←┘
程序说明:for(;(ch=fgetc(fp))!=EOF;)putchar(ch);语句 (1)循环语句中的库函数fgetc() 1) 用法:int fgetc(文件指针); 2) 功能:从“文件指针”所指向的文件中,读入一个字符,同时将读
写位置指针向前移动1个字节(即指向下一个字符)。该函数无出 错返回值。
if(argc>2)
/*参数太多,提示出错*/
{ printf(“Too many paramenters…\n\n”);
exit(0);
}
if(argc==1)
/*缺磁盘文件名,提示输入*/
{ printf(“Input the filename:”);
上一页 下一页 返回
12.3 文件的读写操作
上一页 下一页 返回
12.3 文件的读写操作
12.3.2 读/写一个字符串——fgetc()函数和 fputs()函数
【例12.4】 将键盘上输入的一个长度不超过80的字符串,以ASCⅡ码 形式存储到一个磁盘文件中;然后再输出到屏幕上。
/*程序功能:从键盘上输入一个字符串,存储到一个磁盘文件中、 并显示输出*/
2)标准输出文件——stdout:指向终端输出(一般为显示器)。 3)标准错误文件——stderr:指向终端标准错误输出(一般为显示
器)。
上一页 下一页 返回
12.2 文件的打开与关闭
12.2.2文件的关闭(fclose()函数)
在使用完一个文件后,为防止被误用或数据丢失,应该及时关闭。 (1)用法: fclose(文件指针); (2)功能:关闭“文件指针“所指向的文件。如果正常关闭了文件,
{ printf(“can not open this file\n”);
exit(0)
}
/*从键盘上输入字符串,并存储到指定文件中*/
上一页 下一页 返回
12.3 文件的读写操作
printf(“Input a string: “);gets(string); /*从键盘上输入到字符串*/
fputs(string,fp);
/*从文件中读出一个字符串*/
printf(“Output the string: “);puts(string); /*将字符串输出到屏幕上*/
fclose(fp);
}
上一页 下一页 返回
12.3 文件的读写操作
程序说明: (1)基本思路
为增强程序的可靠性,程序中对参数过多的情况,提示出错、 并终止程序运行(当然,也可以取第1个参数作为文件名,忽略多 余的);而遗漏文件名时,提示用户输入。
12.2.1文件的打开(fopen()函数)
1.格式: fopen(“文件名”,“操作方式”); (1)“文件名”是指要打开(或创建)的文件名。如果使用字符数组
(或字符指针),则不使用双引号。 (2)“操作方式”如表12-1所示。 2.功能:返回一个指向指定文件的指针。
下一页 返回
12.2 文件的打开与关闭
系统给每个打开的文件都在内存中开辟一个区域,用于存放 文件的有关信息(如文件名、文件位置等)。这些信息保存在一 个结构类型变量中,该结构类型由系统定义,取名为FILE(注意: “FILE”必须大写)。并放在<stdio.h>头文件中。
上一页 下一页 返回
12.1 文件概述
4.缓冲文件系统(标准I/O) 所谓缓冲文件系统是指,系统自动地在内存区为每个正在使
上一页 下一页 返回
12.3 文件的读写操作
printf(“\n Usage: 可执行文件名 source file”)
exit(0)
}
if ((fp=fopen(argv[1],”r”))==NULL) /*打开源文件失败*/
{printf(“can not open source file\n”);
/*参数:带参主函数,使用格式:可执行文件名 要创建的磁盘文件 名*/
上一页 下一页 返回
12.3 文件的读写操作
#include”stdio.h”
main(int argc,char*argv[])
{FILE *fp;
/*文件类型名“FILE”,必须大写*/
char string[81];
/*字符数组用于暂存输入输出的字符串*/
if ((fp=fopen(argv[1],”w”))==NULL) /*打开文件失败*/
{ printf(“can not open this file\n”);
exit(0)
}
for(; (ch=getcher())!=’@’; )fputc(ch,fp);/*输入字符并存储到文件中*/
fclose(fp):
(4)fgets(str-out,strlen(str-in)+1,fp);语句中的库函数fgets()——从文 件中读一个字符串
(5)fgets()、fputs()函数与gets()、puts()函数比较。
上一页 下一页 返回
12.3 文件的读写操作
12.3.3 读/写一个数据块——fread()和fwrite()函数
上一页 下一页 返回
12.2 文件的打开与关闭
(2)“r(b)+”与“a(b)+”的区别:使用前者打开文件时,读写 指针指向文件头;使用后者时,读写指针指向文件尾。
(3)使用文本文件向计算机系统输入数据时,系统自动将回车换行符 转换成一个换行符;在输出时,将换行符转换成回车和换行两个 字符。 使用二进制文件时,内存中的数据形式与数据文件中的形式 完全一样,就不再进行转换。
同时,为增强程序的人机交互性,凡是需要用户输入数据的 地方,都设置提示输入的信息;凡是输出数据的地方,都设置输 出说明信息。
一言以蔽之,程序设计的最高境界就是,一切为用户着想! 请读者仔细体会。 (2)缺磁盘文件名时的键盘输入
上一页 下一页 返回
12.3 文件的读写操作
(3)fputs(str-in,fp);语句中的库函数fputs()——向指定文件输出一个 字符串
3.说明 (1)如果不能实现打开指定文件的操作,则fopen()函数返回一个空指
针NULL(其值在头文件stdio.h中被定为0)。 常用下面的方法打开一个文件: if((p=fopen(“文件名”,”操作方式’))==NULL)
{printf(“can not open this file\n”); exit(0); /*关闭打开的所有文件,程序结束运行,返回操作系统 */ }
{FILE *fp;
char ch;
if(argc!=2)
/*参数个数不对*/
{ printf(“the number of arguments not correct\n\n”);
prinft(“Usage: 可执行文件名 filename\n”);
exit(0);
}
下一页 返回
12.3 文件的读写操作
/*关闭文件*/
}
程序运行准备:在Options | Arguments 文本框中,输入文件 名“temp.txt”。注:只要符合文件命名规则,读者完全可以根据 自己的习惯或爱好,给文件另外命名。
程序运行情况:
abcdefg1234567@←┘
上一页 下一页 返回
12.3 文件的读写操作
2.从文件中读入一个字符——fgetc()函数和feof()函数
fwrite()——从buffer开始,一次输入size个字节,重复count 次,并将输出的数据存放到fp所指向的文件中;同时,将读写位 置指针向前移动size*count个字节。其中,buffer是要输出数据在 内存中的起始地址(即从何处开始输出)。
如果调用fread()或fwrite()成功,则函数返回值等于count。 fread()和fwrite()函数一般用于二进制文件的处理。
exit(0)
}
/*顺序输出文件的内容*/
for (; (ch=fgect(fp))!=EOF; ) putchar(ch); /*顺序读入并显示*/
fclose(fp);
/*关闭打开的文件*/
}
上一页 下一页 返回
12.3 文件的读写操作
程序运行准备:在Options | Arguments 文本框中,输入文件名 “temp.txt”。
第12章 文 件
12.1 文件概述 12.2 文件的打开与关闭 12.3 文件的读写操作 12.4位置指针与文件定位
12.1 文件概述
1.文件的分类 文件可以从不同的角度进行分类: (1)根据文件的内容来分:可分为源程序文件、目标文件、可执行文
件和数据文件等。 (2)根据文件的组织形式来分:可分为顺序存取文件和随机存取文件。 (3)根据文件的存储形式来分:可分为ASCⅡ码文件(又称文本文件)
则函数返回值为0;否则,返回值为非0。 例如,fclose(fp); /*关闭fp所指向的文件*/
上一页 返回
12.3 文件的读写操作
12.3.1 读/写文件中的一个字符——fgets()和 fputs()函数
1. 将一个字符写到文件中——fputc()函数
#include”stdio.h”
main(int argc,char*argv[])
fgetc()和fwrite()函数一次只能读/ 写的1个字节数据,但实际 应用中却常常要求1次读/写1个数据块(连续的若干字节)。为此, ANSI C标准设置了fread()和fwrite()函数。 (1)用法:int fread(void *buffer, int size, int count, FILE *fp);
【例12.2】顺序显示【例12.1】创建的ASCⅡ码文件。
#include”stdio.h”
main(int argc,char*argv[])
{ FILE *fp;
char ch;
if(argc!=2)
/*参数个数不对*/
{printf(“the number of arguments not correct\n”);
下一页 返回
12.1 文件概述
2.读文件与写文件 所谓读文件是指,将磁盘文件中的数据传送到计算机内存的
操作。 所谓写文件是指,从计算机内存向盘文件中传送数据的操作。
如图12-2所示。 3.文件类型
int fwrite(void *bu ffer, int size, int count, FILE *fp);
上一页 下一页 返回
12.3 文件的读写操作
(2)功能: fread()\——从fp所指向文件的当前位置开始,一次读入size个
字节,重复count次,并将读入的数据存放到从buffer开始的内存 中;同时将读写位置指针向前移动size*count个字节。其中, buffer是存放读入数据的起始地址(即存放何处)。
(4)有些C编译系统,可能并不完全提供上述对文件的操作方式,或 采用的表示符号不同,请注意所使用系统的规定。
上一页 下一页 返回
12.2 文件的打开与关闭
(5)在程序开始运行时,系统自动打开三个标准文件,并分别定义了 文件指针:
1)标准输入文件——stdin:指向终端输入(一般为键盘)。如果程 序中指定要从stdin所指的文件输入数据,就是从终端键盘上输入 数据。
/*存储到指定文件*/
fclose(fp);
/*重新打开文件,读出其中的字符串,并输出到屏幕上*/
if((fp=fopen(argv[1],”r”))==NULL)
/*打开文件失败*/
{ printf(“can not open this file\n”);
exit(0);
}
fgets(string,strlen(string)+1,fp);
gets(string);
/*借用string数组暂存输入的文件名*/
argv[1]=(char *)malloc(strlen(string)+1); /*给文件名参数申请内存空 间*/
strcpy(argv[1],string);
/*复制文件名到形参中*/
}
if ((fp=fopen(argv[1],”w”))==NULL) /*打开文件失败*/
用的文件开辟一个缓冲区。 从磁盘文件向内存读入数据时,首先将一批数据读入到文件
缓冲区中,再从文件缓冲区将数据逐个送到程序数据区。如图123所示。
从内存向磁盘输出数据时,则正好相反;必须先将一批数据 输出到缓冲区中。待缓冲区装满后,再一起输出到磁盘文件中。 如图12-4所示。
上一页 返回
12.2 文件的打开与关闭
程序运行情况: abcdefg1234567@←┘
程序说明:for(;(ch=fgetc(fp))!=EOF;)putchar(ch);语句 (1)循环语句中的库函数fgetc() 1) 用法:int fgetc(文件指针); 2) 功能:从“文件指针”所指向的文件中,读入一个字符,同时将读
写位置指针向前移动1个字节(即指向下一个字符)。该函数无出 错返回值。
if(argc>2)
/*参数太多,提示出错*/
{ printf(“Too many paramenters…\n\n”);
exit(0);
}
if(argc==1)
/*缺磁盘文件名,提示输入*/
{ printf(“Input the filename:”);
上一页 下一页 返回
12.3 文件的读写操作
上一页 下一页 返回
12.3 文件的读写操作
12.3.2 读/写一个字符串——fgetc()函数和 fputs()函数
【例12.4】 将键盘上输入的一个长度不超过80的字符串,以ASCⅡ码 形式存储到一个磁盘文件中;然后再输出到屏幕上。
/*程序功能:从键盘上输入一个字符串,存储到一个磁盘文件中、 并显示输出*/
2)标准输出文件——stdout:指向终端输出(一般为显示器)。 3)标准错误文件——stderr:指向终端标准错误输出(一般为显示
器)。
上一页 下一页 返回
12.2 文件的打开与关闭
12.2.2文件的关闭(fclose()函数)
在使用完一个文件后,为防止被误用或数据丢失,应该及时关闭。 (1)用法: fclose(文件指针); (2)功能:关闭“文件指针“所指向的文件。如果正常关闭了文件,
{ printf(“can not open this file\n”);
exit(0)
}
/*从键盘上输入字符串,并存储到指定文件中*/
上一页 下一页 返回
12.3 文件的读写操作
printf(“Input a string: “);gets(string); /*从键盘上输入到字符串*/
fputs(string,fp);
/*从文件中读出一个字符串*/
printf(“Output the string: “);puts(string); /*将字符串输出到屏幕上*/
fclose(fp);
}
上一页 下一页 返回
12.3 文件的读写操作
程序说明: (1)基本思路
为增强程序的可靠性,程序中对参数过多的情况,提示出错、 并终止程序运行(当然,也可以取第1个参数作为文件名,忽略多 余的);而遗漏文件名时,提示用户输入。
12.2.1文件的打开(fopen()函数)
1.格式: fopen(“文件名”,“操作方式”); (1)“文件名”是指要打开(或创建)的文件名。如果使用字符数组
(或字符指针),则不使用双引号。 (2)“操作方式”如表12-1所示。 2.功能:返回一个指向指定文件的指针。
下一页 返回
12.2 文件的打开与关闭
系统给每个打开的文件都在内存中开辟一个区域,用于存放 文件的有关信息(如文件名、文件位置等)。这些信息保存在一 个结构类型变量中,该结构类型由系统定义,取名为FILE(注意: “FILE”必须大写)。并放在<stdio.h>头文件中。
上一页 下一页 返回
12.1 文件概述
4.缓冲文件系统(标准I/O) 所谓缓冲文件系统是指,系统自动地在内存区为每个正在使
上一页 下一页 返回
12.3 文件的读写操作
printf(“\n Usage: 可执行文件名 source file”)
exit(0)
}
if ((fp=fopen(argv[1],”r”))==NULL) /*打开源文件失败*/
{printf(“can not open source file\n”);
/*参数:带参主函数,使用格式:可执行文件名 要创建的磁盘文件 名*/
上一页 下一页 返回
12.3 文件的读写操作
#include”stdio.h”
main(int argc,char*argv[])
{FILE *fp;
/*文件类型名“FILE”,必须大写*/
char string[81];
/*字符数组用于暂存输入输出的字符串*/
if ((fp=fopen(argv[1],”w”))==NULL) /*打开文件失败*/
{ printf(“can not open this file\n”);
exit(0)
}
for(; (ch=getcher())!=’@’; )fputc(ch,fp);/*输入字符并存储到文件中*/
fclose(fp):
(4)fgets(str-out,strlen(str-in)+1,fp);语句中的库函数fgets()——从文 件中读一个字符串
(5)fgets()、fputs()函数与gets()、puts()函数比较。
上一页 下一页 返回
12.3 文件的读写操作
12.3.3 读/写一个数据块——fread()和fwrite()函数
上一页 下一页 返回
12.2 文件的打开与关闭
(2)“r(b)+”与“a(b)+”的区别:使用前者打开文件时,读写 指针指向文件头;使用后者时,读写指针指向文件尾。
(3)使用文本文件向计算机系统输入数据时,系统自动将回车换行符 转换成一个换行符;在输出时,将换行符转换成回车和换行两个 字符。 使用二进制文件时,内存中的数据形式与数据文件中的形式 完全一样,就不再进行转换。
同时,为增强程序的人机交互性,凡是需要用户输入数据的 地方,都设置提示输入的信息;凡是输出数据的地方,都设置输 出说明信息。
一言以蔽之,程序设计的最高境界就是,一切为用户着想! 请读者仔细体会。 (2)缺磁盘文件名时的键盘输入
上一页 下一页 返回
12.3 文件的读写操作
(3)fputs(str-in,fp);语句中的库函数fputs()——向指定文件输出一个 字符串
3.说明 (1)如果不能实现打开指定文件的操作,则fopen()函数返回一个空指
针NULL(其值在头文件stdio.h中被定为0)。 常用下面的方法打开一个文件: if((p=fopen(“文件名”,”操作方式’))==NULL)
{printf(“can not open this file\n”); exit(0); /*关闭打开的所有文件,程序结束运行,返回操作系统 */ }
{FILE *fp;
char ch;
if(argc!=2)
/*参数个数不对*/
{ printf(“the number of arguments not correct\n\n”);
prinft(“Usage: 可执行文件名 filename\n”);
exit(0);
}
下一页 返回
12.3 文件的读写操作
/*关闭文件*/
}
程序运行准备:在Options | Arguments 文本框中,输入文件 名“temp.txt”。注:只要符合文件命名规则,读者完全可以根据 自己的习惯或爱好,给文件另外命名。
程序运行情况:
abcdefg1234567@←┘
上一页 下一页 返回
12.3 文件的读写操作
2.从文件中读入一个字符——fgetc()函数和feof()函数
fwrite()——从buffer开始,一次输入size个字节,重复count 次,并将输出的数据存放到fp所指向的文件中;同时,将读写位 置指针向前移动size*count个字节。其中,buffer是要输出数据在 内存中的起始地址(即从何处开始输出)。
如果调用fread()或fwrite()成功,则函数返回值等于count。 fread()和fwrite()函数一般用于二进制文件的处理。
exit(0)
}
/*顺序输出文件的内容*/
for (; (ch=fgect(fp))!=EOF; ) putchar(ch); /*顺序读入并显示*/
fclose(fp);
/*关闭打开的文件*/
}
上一页 下一页 返回
12.3 文件的读写操作
程序运行准备:在Options | Arguments 文本框中,输入文件名 “temp.txt”。
第12章 文 件
12.1 文件概述 12.2 文件的打开与关闭 12.3 文件的读写操作 12.4位置指针与文件定位
12.1 文件概述
1.文件的分类 文件可以从不同的角度进行分类: (1)根据文件的内容来分:可分为源程序文件、目标文件、可执行文
件和数据文件等。 (2)根据文件的组织形式来分:可分为顺序存取文件和随机存取文件。 (3)根据文件的存储形式来分:可分为ASCⅡ码文件(又称文本文件)
则函数返回值为0;否则,返回值为非0。 例如,fclose(fp); /*关闭fp所指向的文件*/
上一页 返回
12.3 文件的读写操作
12.3.1 读/写文件中的一个字符——fgets()和 fputs()函数
1. 将一个字符写到文件中——fputc()函数
#include”stdio.h”
main(int argc,char*argv[])
fgetc()和fwrite()函数一次只能读/ 写的1个字节数据,但实际 应用中却常常要求1次读/写1个数据块(连续的若干字节)。为此, ANSI C标准设置了fread()和fwrite()函数。 (1)用法:int fread(void *buffer, int size, int count, FILE *fp);
【例12.2】顺序显示【例12.1】创建的ASCⅡ码文件。
#include”stdio.h”
main(int argc,char*argv[])
{ FILE *fp;
char ch;
if(argc!=2)
/*参数个数不对*/
{printf(“the number of arguments not correct\n”);