第10章 对文件的输入输出

合集下载

第10章 对文件的输入和输出

第10章 对文件的输入和输出

ch=getchar();
while(ch!='#') { fputc(ch,fp);
putchar(ch); ch=getchar(); } fclose(fp); }
scanf("%d",&m); while(m!=0) { fprintf(fp,"%d,",m);
printf("%d ",m); scanf("%d",&m); }
步2:调试,存盘
步3:修改增加文件指针操作 main() {char s1[80],s2[80]; int i,j,k=0; FILE *fp; fp=fopen("D:\\file10.out","w"); if(fp==NULL)
{printf("Can not open \n"); exit(0);} gets(s1); s2[k++]=s1[0]; for(i=1;s1[i]!='\0';i++) {
3.文件指针的定位
(1)feof()
格式: feof(fp) 功能:检查文件位置指针是否在结尾处,若是返回0,否则返回非0. 常用方式: while(!feof(fp)){ };
(2)rewind()
格式:rewind(fp) 作用:将位置指针移到文件头部,无论原来在何处
(3)fseek()
格式:fseek(fp,偏移量,起始位置) 功能:将文件的读写指针移动到指定的位置 起始位置: SEEK_SET 文件首, SEEK_END文件尾,
文件的关闭 :fclose(文件指针);
10.3 顺序读写数据文件

C语言程序设计教程第10章 文件的输入输出2018精简版

C语言程序设计教程第10章 文件的输入输出2018精简版

11:56
7
10.1.1 什么是文件

输入输出是数据传送的过程,数据如流水 一样从一处流向另一处,因此常将输入输 出形象地称为流(stream),即数据流。流 表示了信息从源到目的端的流动。
11:56
8
10.1.1 什么是文件



输入操作时,数据从文件流向计算机内存 输出操作时,数据从计算机流向文件 无论是用Word打开或保存文件,还是C程 序中的输入输出都是通过操作系统进行的 “流”是一个传输通道,数据可以从运行 环境流入程序中,或从程序流至运行环境
文件的打开总结 C文件操作用库函数实现,包含在stdio.h
文件使用方式:打开文件-->文件读/写-->关闭文件 系统自动打开和关闭三个标准文件: 例: FILE *fp;

标准输入 ------键盘c:\\fengyi\\bkc\\test.dat stdin char *filename=“ ”; 例:FILE *fp; 标准输出------显示器 fp= fopen(filename,“r”); stdout 例 文件打开与测试 fp= fopen (“c:\\fengyi\\bkc\\test.dat ”,“r”); 文件使用方式 标准出错输出 -----显示器 含义 stderr FILE *fp; rb 打开文件 fopen “r/ ” (只读 ) 打开一个文本/二进制文件 函数原型: *fopen(char *name,char *mode) “w/wb” (只写fp=fopen ) FILE (“aa.c”,“w”); 打开或建立一个文本 /二进制文件 if(fp==NULL) “a/ab” (追加) 向文本/二进制文件尾追加数据 { printf(“File open error!\n”); 要打开的文件名 使用文件方式 “r+/rb+” (读写) 读/写打开一个文本 /二进制文件 exit(0); “w+/ wb+” (读 功能:按指定方式打开文件 读/写建立一个文本/二进制文件 } 写 ) 返回值:正常打开,为指向文件结构体的指针;打开失败, “a+/ab +” (读写) 读/写打开或建立一个文本/二进制文件 为 NULL

第10章文件的输入输出

第10章文件的输入输出

第10章文件的输入输出10第章对文件的输入输出C文件的有关基本知识什么是文件文件有不同的类型,在程序设计中,主要用到两种文件:(1)程序文件。

包括源程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行文件(后缀为.exe)等。

这种文件的内容是程序代码。

(2)数据文件。

文件的内容不是程序,而是供程序运行时读写的数据,如在程序运行过程中输出到磁盘(或其他外部设备)的数据,或在程序运行过程中供读入的数据。

如一批学生的成绩数据、货物交易的数据等。

为了简化用户对输入输出设备的操作,使用户不必去区分各种输入输出设备之间的区别,操作系统把各种设备都统一作为文件来处理。

从操作系统的角度看,每一个与主机相连的输入输出设备都看作一个文件。

例如,终端键盘是输入文件,显示屏和打印机是输出文件。

什么是文件文件(file)一般指存储在外部介质上数据的集合。

操作系统是以文件为单位对数据进行管理的。

输入输出是数据传送的过程,数据如流水一样从一处流向另一处,因此常将输入输出形象地称为流(stream),即数据流。

流表示了信息从源到目的端的流动。

在输入操作时,数据从文件流向计算机内存,在输出操作时,数据从计算机流向文件(如打印机、磁盘文件)。

C语言把文件看作一个字符(或字节)的序列,即由一个一个字符(或字节)的数据顺序组成。

一个输入输出流就是一个字符流或字节(内容为二进制数据)流。

C的数据文件由一连串的字符(或字节)组成,而不考虑行的界限,两行数据间不会自动加分隔符,对文件的存取是以字符(字节)为单位的。

输入输出数据流的开始和结束仅受程序控制而不受物理符号(如回车换行符)控制,这就增加了处理的灵活性。

这种文件称为流式文件。

文件名一个文件要有一个唯一的文件标识,以便用户识别和引用。

文件标识包括3部分:(1)文件路径;(2)文件名主干;(3)文件后缀。

文件路径表示文件在外部存储设备中的位置。

文件名主干的命名规则遵循标识符的命名规则。

第10章 对文件的输入输出-简版

第10章 对文件的输入输出-简版

例 :把30个学生的数据输出到fp所指文件中。
struct st { char num[8]; float mk[5]; }; st pers [30];……. for (i=0;i<30;i++) fwrite (&pers[i],sizeof(struct st),1,fp);
例:将每个学生数据又逐个读入到kk数组中。
起始点的表示方法
标识符 数字 SEEK_SET 0 SEEK_END 2 SEEK_CUR 1 代表的起始点 文件开始 文件末尾 文件当前位置
假设fp已指向一个二进制文件,则; fseek(fp,30L,SEEK_SET) 表示从文件的开头后移30个字节。 fseek(fp,-10L*sizeof(int),SEEK_END) 表示从文件尾部前移10个sizeof(int)即20个字节。 对于文本文件,位移量必须是0;如: fseek(fp,0L,SEEK_SET) 移到文件的开始。 fseek(fp,0L,SEEK_END) 移到文件的末尾。
二、对二进制文件操作 fread函数和fwrite函数
fread and fwrite函数用来读、写二进制文件。 它们的调用形式如下:
fread(buffer,size,count,fp); fwrite(buffer,size,count,fp);
buffer:要输入或输出的数据块的首地址 size:每个数据块的字节数 count:每读写一次,输入或输出数据块的个数 fp:文件指针
2. ftell函数
ftell函数用以获得文件当前位置指针的位置,函数 给出当前位置指针相对于文件开头的字节数。 long t; t=ftell(fp); 当函数调用出错时,函数返回-1L。 我们可以通过以下方式来测试一个文件的长度: fseek(fp,0L,SEEK_END); t=ftell(fp);

第10章 对文件的输入输出

第10章 对文件的输入输出

10.3.3用格式化的方式读写文件
一般调用方式为:
fscanf (文件指针,格式字符串,输入表列);
fprintf(文件指针,格式字符串,输出表列); 如: fscanf (fp,”%d,%f”,&i,&f); fprintf (fp,”%d,%f”,i,f);
读入文件数据的编程框架
一次性的数据——用普通变量存
00110001 00110000 00110000 00110000 00110000
’0’
’0’
’0’
’0’
二进制文件
10000的二进制存放形式
00000000 00000000 00100111 00010000
(10000)
二进制文件特点: 存储量小、速度快、便于存放中间结果
10.1.5 文件类型指针
时读写的数据. ASCII文件、二进制文件
字符一律以ASCII形式存储(文本文件) 数值型数据既可以用ASCII形式存储,也可以用二进制 形式存储 C语言可以处理的文件类型是:文本文件和二进制文件
10.1.3 文件的分类 文本文件特点 :
文本文件
’1’
存储量大、速度慢、便于对字符操作 10000的ASCII码存放形式
如果文件打开失败,则返回值为NULL if((fp1=fopen("d:\\wj5.txt","r"))==NULL) exit(0); fp1 = fopen ("d:\\wj5.txt", "r"); if (fp1 = = NULL) exit (0);
文件使用方式由r,w,a,t,b,+ 六个字符拼成,各 字符的含义是: r(read): 读 w(write): 写 a(append): 追加 t(text): 文本文件,可省略不写 b(banary): 二进制文件 + 读和写

第10章文件输入输出

第10章文件输入输出
fgetc
调用形式
fgetc(fp)
功能
从fp指向的 文件读入一 个字符
返回值
读成功,带回所读 的字符,失败则返 回文件结束标志 EOF(即-1) 写成功,返回值就 是输出的字符;输 出失败,则返回 EOF(即-1)
fputc
把字符ch写 到文件指针 fputc(ch,fp) 变量fp所指 向的文件中
10.2.1 用fopen函数打开数据文件
文件的使用方式
文本文件 方式 含义 方式 二进制文件 含义
“r”
“w” “a”
打开只读文件
新建只写文件 打开添加写文件
“rb”
“ห้องสมุดไป่ตู้b”
打开只读文件
打开添加写文件
“wb” 新建只写文件 “rb+” 打开读/写文件 “wb+ 新建读/写文件 ” “ab+” 打开读/写文件
49 50 51 52
以二进制文件保存
整数1234对应的二进制数:
0000 0100 1101 0010
文件操作
文件操作的4个基本步骤:
1. 定义文件指针
FILE *fp ;
2. 打开文件
fp = fopen(文件名,使用方式);
3. 文件读写 ……
4. 关闭文件 fclose(fp);
10.1 文件的基本概念
一般不超过 3个字母(doc、txt、dat、 10.1 文件的基本概念 c、cpp、obj、exe、ppt等) 文件路径表示文件在外部存储设备中的位 置。如:
D: \CC\temp\file1.dat 表示file1.dat文件存放在D盘中的CC目录下 的temp子目录下面
10.1 文件的基本概念

WL第10章_对文件的输入输出

WL第10章_对文件的输入输出

退出
8/33
WangLan
文件的存放

可以建立若干目录(文件夹), 在目录里保存文件,同一级目录 里保存的文件不能同名。 对使用者而言,只要知道文件的 路径(全目录)和文件名,就能 使用该文件
C:\home\Sunner\main.c
这都是OS的功劳

退出
9/33
WangLan
文件的类型
件。 ch = fgetc(fp1); while(ch!=EOF) { fputc(ch,fp2); ch = fgetc(fp1); }
退出
21/33
WangLan
C语言独特的文件访问

字符串读写 char *fgets(char *s,int n,FILE *fp);
特例
fgets(buf, sizeof(buf), stdin);

write:写文件

13/33
WangLan
文件访问

基本模式
close:关闭文件
表明操作结束,不再使用此文件。 文件使用完毕必须关闭,否则影响系统性能。 seek:文件定位 随机控制流的当前位置。

退出ter)

while(!feof(fp)) //while(ch!=EOF) { ch = fgetc(fp);putchar(ch); }
退出
26/33
WangLan
实验 文件复制与追加


程序1: 根据程序提示从键盘输入一个已存在的文本文件 的完整文件名,并再输入一个新文本文件的完整 文件名。 然后编程将已存在文本文件中的内容全部拷贝到 新文本文件中去。 利用文本编辑软件,通过查看文件内容验证程序 执行结果。

二级C语言历年真题汇总__第10章对文件的输入输出-李赛红

二级C语言历年真题汇总__第10章对文件的输入输出-李赛红

二级C语言历年真题汇总__第10章对文件的输入输出-李赛红第10章对文件的输入输出(20xx年x月真题)(40)有以下程序#include <stdio.h>main(){ FILE *fp;int i,a[6]={1,2,3,4,5,6};fp=fopen("d2.dat","w+");for(i=0;i<6;i++) fprintf(fp,"%d\n",a[i]);rewind(fp);for(i=0;i<6;i++) fscanf(fp,"%d",&a[5-i]);fclose(fp);for(i=0;i<6;i++) printf("%d,",a[i]);}程序运行后的输出结果是A)4,5,6,1,2,3, B)1,2,3,3,2,1,C)1,2,3,4,5,6, D)6,5,4,3,2,1,答案:D(20xx年x月真题)40、以下函数不能用于向文件写入数据的是A ftellB fwriteC fputcD fprintf答案:A(20xx年x月真题)40.有以下程序#include<stdio.h>main(){FILE *fp; int k,n,i,a[6]={1,2,3,4,5,6};fp=fopen("d2.dat","w");for(i=0;i<6;i++)fprintf(fp,"%d\n",a[i]);fclose(fp); fp=fopen("d2.dat","r");for(i=0;i<3;i++)fscanf(fp,"%d%d",&k,&n);fclose(fp); printf("%d,%d\n",k,n); }程序运行后的输出结果是A.1,2B.3,4C.5,6D.123,456答案:C(20xx年x月真题)(40)设fp已定义,执行语句fp=fopen("file","w");后,以下针对文本文件file操作叙述的选项中正确的是A)写操作结束后可以从头开始读 B)只能写不能读C)可以在原有内容后追加写 D)可以随意读和写(20xx年x月真题)(40)有以下程序#include#include<stdio.h>main(){ FILE *fp;char str[10];fp=fopen("myfile.dat","w");fputs("abc",fp);fclose(fp);fopen("myfile.data","a+");fprintf(fp,"%d",28);rewind(fp);fscanf(fp,"%s",str); puts(str);fclose(fp); }程序运行后的输出结果是A) abc B) 28c C) abc28 D)因类型不一致而出错答案:B(20xx年x月真题)(40)下列关于C语言文件的叙述中正确的是A)文件由一系列数据依次排列组成,只能构成二进制文件B)文件由结构序列组成,可以构成二进制文件或文本文件C)文件由数据序列组成,可以构成二进制文件或文本文件D)文件由字符序列组成,其类型只能是文本文件答案:C(20xx年x月真题)40.有以下程序#include <stdio.h>main(){ FILE *f;f=fopen("filea.txt","w"); fprintf(f,"abc"); fclose(f); }若文本文件filea.txt中原有内容为:hello,则运行以上程序后,文件filea.txt的内容为A)helloabc B)abclo C)abc D)abchello答案:C(20xx年x月真题)(40)有以下程序#include <stdio.h>main(){ FILE *pf;char *s1="China", *s2="Beijing";pf=fopen("abc.dat","wb+");fwrite(s2,7,1,pf);rewind(pf); /*文件位置指针回到文件开头*/fwrite(s1,5,1,pf);fclose(pf);}以上程序执行后abc.dat文件的内容是A) China B) Chinang C) ChinaBeijing D) BeijingChina答案:B(20xx年x月真题)30、下列叙述中错误的是( )。

第10章 对文件的输入输出

第10章 对文件的输入输出

5/26
第10章 对文件的输入输出 5.文件类型指针 对于每个被使用的文件,系统除了在内存中为其开辟一个文 件缓冲区外,还开辟一个相应的文件信息区,用来存放该文件 的相关信息(如文件的名字、文件状态、文件当前位置等)。
这些信息保存在一个结构体变量中,由系统声明为FILE类型。
6/25
第10章 对文件的输入输出
(1)文件路径:文件所处的位置。
(2)文件名主干:文件的名称 。
(3)文件后缀:表示文件的性质。
D:\ABC\H\file1.dat
3/25
第10章 对文件的输入输出 3.文件的分类(只介绍数据文件) 根据数据的组织形式,文件可分为两类: (1)ASCII文件:又称文本文件。 数据以ASCII码形式存放在文件中。
文件名:代表文件名的字符串。
使用文件方式 :读(r)、写(w)等。
10/25
第10章 对文件的输入输出
2.关闭文件函数:fclose()
调用格式:fclose(文件指针)
fclose(fp);
11/25
第10章 对文件的输入输出
本章主要内容: 1.文件的相关知识 2.文件的打开与关闭 3.文本文件的读写 4.二进制文件的读写
7/25
第10章 对文件的输入输出 在对文件进行读写时,一般不直接使用FILE类型的结构 体变量,而是通过一个指向FILE类型的指针变量来进行。 (文件信息区由系统自动分配,而且访问文件所用的函数要求 使用的参数就是该类型的指针)
FILE *fp;
8/25
第10章 对文件的输入输出
本章主要内容: 1.文件的相关知识 2.文件的打开与关闭 3.文本文件的读写 4.二进制文件的读写
6学时(含2学时上机)

C语言与程序设计ppt-第10章文件的输入与输出

C语言与程序设计ppt-第10章文件的输入与输出
另外,关闭文件的操作也会使操作系统强制性的将缓冲区中的数据写到外 部文件,以保证数据的完整性。
缓冲区在程序开始运行时由系统分配,在程序运行结束时由系统回收。 在流式文件中,程序通过FILE类型的文件指针对外部文件进行输入输出操
作,FILE类型是一个结构类型,它通过其不同成员的不同取值来描述文件 在I/O过程中的状态。
C的标准I/O由标准C规定。如C语言标准ISO/IEC 9899:1999 (E)中第7章Library)中Input/output一节, 就定义了流、文件的概念,规定了对文件的操作,以及从 文件访问、格式化的输入/输出、字符输入/输出、直接输 入/输出、读写指针操作、出错处理六个方面精确的给出 各个函数的原型和操作语义的定义。
2020/7/3
华中科技大学计算机学院C语言课程组
14
文件的操作步骤
无论是缓冲或者非缓冲的文件I/O,文件 操作的步骤都是:
第一,打开文件,建立文件指针或文件描 述符与文件间联系;
第二,对文件进行读写操作; 第三,关闭文件,取消文件指针或文件描
述符与文件间联系。
2020/7/3
华中科技大学计算机学院C语言课程组
};
typedef struct _iobuf FILE; Turbo C中关于FILE结构的定义与VC中略有不同,但是缓冲区基地址、当前读
写位置、缓冲区空满、文件描述符、文件状态等成员必须包括,只不过命名不 同而已。
读者可以打开Turbo C中的头文件stdio.h中进行比较。
2020/7/3
在二进制流中,数据按照顺序以二进制字节的形式存放,数 据的二进制字节与它们在内存中存储时的格式和形式一致。 并且,从二进制流中读取数据应该与它们先前写入到流中的 格式一致。二进制流以空(NULL)作为终结符。

面向对象程序设计C++第10章 文件的输入输出

面向对象程序设计C++第10章 文件的输入输出

学习目标
目录页
理解函数模板、类模板的概念 掌握函数模板和类模板的区别及引用
了解异常的基本概念
掌握异常处理方法
第10章 C++的I/O流类库
10.1 C++文件ቤተ መጻሕፍቲ ባይዱ基本知识
目录页
什么是模板?为什么要使用模板? 编写程序时,经常遇到这样的情况:若干程序单元(如函数或者类定义)中除了所处理的数据 类型不同,程序代码是一样的。例如交换两个变量的值,考虑到需要处理不同的数据类型,所以一 般采用重载技术。
第10章 C++的I/O流类库
10.1 C++文件的基本知识
目录页
10.1.1 标准输入和输出 表10-1 I/O流类
类 名 ios istream ostream iostream ifstream ofstream fstream istrstream ostrstream strstream 用 途 抽象流基类 通用输入流基 通用输出流基 通用输入/输出流基 输入文件流类 输出文件流类 输入/输出流类 输入字符串流 输出字符串流 输入/输出字符串流 strstream.h fstream.h 所在头文件 iostream.h iostream.h
1. 使用成员函数open()打开文件
表10-2 文件打开模式mode的取值
Mode 取值 ios::in ios::out ios::ate ios::app ios::trunc ios::nocreate ios::noreplace ios::binary 打开文件用于读操作 打开文件用于写操作 打开文件,并把文件指针定位到文件尾部 在文件原有内容末尾追加 如果文件存在,清空该文件 只有文件存在情况下才能打开,否则失败 只有文件不存在情况下才能打开,否则失败 以二进制(非文本)打开文件 含义

最新文件的输入与输出PPT课件

最新文件的输入与输出PPT课件

10.1.1 什么是文件
➢C的数据文件由一连串的字符(或字节) 组成,而不考虑行的界限,两行数据间不 会自动加分隔符,对文件的存取是以字符 (字节)为单位的。输入输出数据流的开 始和结束仅受程序控制而不受物理符号( 如回车换行符)控制,这就增加了处理的 灵活性。这种文件称为流式文件。
10.1.2 文件名
10.1.3 文件的分类➢符一律以ASCII形式存储➢数值型数据既可以用ASCII形式存储,也 可以用二进制形式存储
如有整数10000,如果用ASCII码形式输出 到磁盘,则在磁盘中占5个字节(每一个字符 占一个字节),而用二进制形式输出,则在磁 盘上只占4个字节(用VC++ C时)
10.1.3 文件的分类
ASCII形式
00110001 00110000 00110000 00110000 00110000
(1) (0) (0) (0) (0)
二进制形式
00000000 00000000 00100111 00010000
(10000)
10.1.4 文件缓冲区
➢ANSI C标准采用“缓冲文件系统”处理 数据文件
程序中的输入输出都是通过操作系统进行 的 ➢“流”是一个传输通道,数据可以从运行 环境流入程序中,或从程序流至运行环境
10.1.1 什么是文件
➢从C程序的观点来看,无论程序一次读写 一个字符,或一行文字,或一个指定的数 据区,作为输入输出的各种文件或设备都 是统一以逻辑数据流的方式出现的。C语 言把文件看作是一个字符(或字节)的序 列。一个输入输出流就是一个字符流或字 节(内容为二进制数据)流。
D: \CC\temp\file1.dat 表示file1.dat文件存放在D盘中的CC目录下

第10章 对文件的输入输出

第10章 对文件的输入输出

fwrite(buffer,size,count,fp); buffer:指针,对于fread,是读入数据的 存放地址,对fwrite,是要输出数据的地 址。
size:要读写的字节数 count:读写多少个size字节 fp:文件型指针
文件操作的说明:
定义文件指针
。 FILE *文件指针名; 文件指针是一个名为FILE(必须大写) 的结构体类型的指针 。 需要加#include <stdio.h>
编程点拨:
向文件输出字符串的操作与用printf进 行“输出”十分相似。
对文件进行操作时,需要先打开文件, 操作完毕还要关闭文件。
#include <stdio.h> main( ) { char a[80]= "Let's study the C language."; FILE *fp; 定义文件指针fp fp=fopen(“e:\z.TXT","w"); 用“写”方式打 开文本文件 fprintf(fp, "%s", a); z.TXT 将数组a中的字符串输 fclose(fp); 出到fp所指的文件中 } 关闭文件 屏幕上无任何显示
第10章
对文件的输入输出
10.1 文件的概述 10.2 文件的基本操作
10.1 文件的概述
文件的概念
文件——存储在外部介质(如磁盘)上的数据 的集合。 若按介质划分:磁盘文件、磁带文件。 若按文件内容划分:源程序文件、数据文件。 若按组织形式划分:文本文件和二进制文件。
文本文件和二进制文件
文件的读写操作是通过调用标准输 入输出函数完成。 关闭文件。 fclose(文件指针); 如:fclose(fp);

对文件的输入输出10

对文件的输入输出10

(读写)为读/写打开一种二进制文件
➢ 阐明: (1) 用“r”方式打开旳文件只能用于向计算机输入而不能用作向该文 件输出数据,而且该文件应该已经存在,并存有数据,这么程序才干 从文件中读数据。
不能用“r”方式打开一种并不存在旳文件,不然犯错。 (2) 用“w”方式打开旳文件只能用于向该文件写数据(即输出文件)
,而不能用来向计算机输入。
假如原来不存在该文件,则在打开文件前新建立一种以指定旳名字命 名旳文件。
假如原来已存在一种以该文件名命名旳文件,则在打开文件前先将该 文件删去,然后重新建立一种新文件。
(3) 假如希望向文件末尾添加新旳数据(不希望删除原有数据),则应 该用“a”方式打开
但此时应确保该文件已存在;不然将得到犯错信息。 打开文件时,文件读写标识移到文件末尾
{
printf("无法打开此文件\n");
exit(0);
}
10.3.2 怎样向文件读写一种字符串
➢ 读写一种字符串旳函数
函数名 fgets
调用形式
功能
返回值
从fp指向旳文
件读入长度
为(n-1)旳字
fgets(str,n,fp)
符串,存储
读成功,返回地 址 str , 失 败 则 返回NULL
到字符数组 str中
➢ 阐明: (4) 假如打开失败,fopen函数将会带回一种犯错信息。fopen函数将 带回一种空指针值NULL 常用下面旳措施打开一种文件:
if ((fp=fopen(“file1”,’r″))==NULL) {printf(“cannot open this file\n”);
exit(0); } (5) 计算机输从ASCII文件读入字符时,遇到回车换行符,系统把它转 换为一种换行符,在输出时把换行符转换成为回车和换行两个字符。在用 二进制文件时,不进行这种转换,在内存中旳数据形式与输出到外部文件 中旳数据形式完全一致,一一相应。

第10章 对文件的输入输出

第10章 对文件的输入输出
所谓文件一般指存储在外部介质(如磁盘磁带) 上数据的集合. 操作系统是以文件为单位对数据进行管理的.
输出文件缓冲区 程序 数据区 输入文件缓冲区
文件
文件的分类
从用户观点:
特殊文件(标准输入输出文件或标准设备文 件) 普通文件(磁盘文件) 从操作系统的角度看,每一个与主机相连的输 入输出设备看作是一个文件。 例:输入文件:终端键盘
返回值: 读取成功一个字符,赋给ch。 如果遇到文件结束符,返回一个文件结束标志 E个文本文件顺序读入字符并在屏幕上显示 出来:
注意:EOF不是可输出字, ch = fgetc(fp); 因此不能在屏幕上显示。 while(ch!=EOF) 由于字符的ASCII码不可能出 现-1,因此EOF定义为-1 { 是合适的。当读入的字符值 等于-1时,表示读入的已不 putchar(ch); 是正常的字符而是文件结束 ch = fgetc(fp); 符。
fputs函数
函数调用:fputs ( ch,fp ) ;
函数功能: 将字符(ch的值)输出到fp所指向 的文件中去。
返回值: 如果输出成功,则返回值就是输出的字符; 如果输出失败,则返回一个EOF.
fgetc函数
函数调用:ch=fgetc(fp);
函数功能: 从指定的文件读入一个字符,该文 件必须是以读或读写方式打开的。
三.其他读写函数
putw()和getw()
函数调用:
putw(int i,FILE * fp);
int i = getw(FILE * fp);
函数功能: 对磁盘文件中读写一个字(整数)。
例:putw(10,fp); i = getw(fp);
用户自定义读取其他类型数据的函数

C语言第10章 对文件的输入输出

C语言第10章  对文件的输入输出

// 关闭文件 // 向屏幕输出一个换行符,换行符的ASCII代码为10
#include <stdio.h> #include <stdlib.h> 例 10-2 int main( ) {FILE *in,*out; char ch,infile[10],outfile[10]; // 定义两个字符数组,分别存放两个文件名 printf("输入读入文件的名字:"); scanf("%s",infile); // 输入一个输入文件的名字 printf("输入输出文件的名字:"); scanf("%s",outfile); // 输入一个输出文件的名字 if((in=fopen(infile,"r"))==NULL) // 打开输入文件 {printf("无法打开此文件\n"); exit(0); } if((out=fopen(outfile,"w"))==NULL) // 打开输出文件 {printf("无法打开此文件\n"); exit(0); } while(!feof(in)) // 如果未遇到输入文件的结束标志 {ch=fgetc(in); // 从输入文件读入一个字符,暂放在变量ch中 fputc(ch,out); // 将ch写到输出文件中 putchar(ch); // 将ch显示在屏幕上 } putchar(10); // 显示完全部字符后换行 fclose(in); // 关闭输入文件 fclose(out); // 关闭输出文件 return 0; }
以上六种方式是针对“文本文件”类型
表10-2二进制文件的符号及其含义
文件使用方式 rb wb ab rb+ wb+ ab+ 代表的含义 打开一个已存在的二进制文件,只允许读数据 打开或建立一个二进制文件,只允许写数据 打开一个二进制文件,并在文件末尾追加数据 打开一个二进制文件,允许读和写 打开或建立一个二进制文件,允许读和写 打开一个二进制文件,允许读或在文件末追加数据

C语言第10章 对文件的输入输出概述

C语言第10章  对文件的输入输出概述

写字符函数——fputc函数
fputc 函数用来将一个字符写入指定的文件中,该函数的调用格 式为: fputc(ch,fp); 其中ch可以是一个字符常量,也可以是一个字符变量。fp是文件 指针变量。该函数的作用是将字符 (ch 的值 ) 输出到 fp 所指定的文件 中去。fputc函数也带回一个值,如果输出成功,则返回值就是输出 的字符,如果输出失败,则返回EOF(-1)。
10.2.2文件的关闭
文件一旦使用完毕,应使用关闭文件函数 fclose把文件关闭,以避免 文件数据丢失等情况的发生。 fclose函数调用的一般形式为: fclose(FILE *fp); 其中,参数 fp 是文件型指针,通过 fopen() 函数已经获得,它指向某 个打开的文件。例如: fclose(fp); 上述语句的含义是关闭fp所指向的文件,同时自动释放分配给文件 的内存缓冲区。当正常完成关闭文件的操作时,fclose函数的返回值为 0,表示已正确关闭指定的文件;如返回非0值则表示有错误发生。
fgetc函数用来从指定的文件读入一个字符,该文件必须是读或写方 式打开的。fgetc函数的调用格式如下: ch=fgetc(fp); 其中fp为文件类型指针,ch为字符变量。fgetc函数返回的字符赋给 字符变量ch。如果在执行fgetc函数读字符时遇到文件结束符,则该函 数返回一个结束标志EOF(-1)。如果想从磁盘文件顺序读入字符并在屏 幕上显示出来,可以用以下的程序段: ch=fgetc(fp); while(ch!=EOF) { putchar(ch); ch=fgetc(fp); }
第 10 章 对文件的输入输出 文件:存储在外部介质上数据的集合。
操作系统是以文件为单位对数据进行管理的。 与主机相联的输入输出设备都看作是一个文件。

第10章 文件的输入输出2018

第10章 文件的输入输出2018

11:55
7
10.1.1 什么是文件

输入输出是数据传送的过程,数据如流水 一样从一处流向另一处,因此常将输入输 出形象地称为流(stream),即数据流。流表 示了信息从源到目的端的流动。
11:55
8
10.1.1 什么是文件



输入操作时,数据从文件流向计算机内存 输出操作时,数据从计算机流向文件 无论是用Word打开或保存文件,还是C程序 中的输入输出都是通过操作系统进行的 “流”是一个传输通道,数据可以从运行 环境流入程序中,或从程序流至运行环境
11:55
20
10.1.4 文件缓冲区


从内存向磁盘输出数据必须先送到内存中的 缓冲区,装满缓冲区后才一起送到磁盘去 如果从磁盘向计算机读入数据,则一次从磁 盘文件将一批数据输入到内存缓冲区(充满 缓冲区),然后再从缓冲区逐个地将数据送 到程序数据区(给程序变量)
11:55
21
10.1.4 文件缓冲区

文件路径表示文件在外部存储设备中的位 置。如:

D: \CC\temp\file1.dat 表示file1.dat文件存放在D盘中的CC目录下的 temp子目录下面
11:55
16
10.1.3 文件的分类

根据数据的组织形式,数据文件可分为 ASCII文件和二进制文件。



数据在内存中是以二进制形式存储的,如果不 加转换地输出到外存,就是二进制文件 如果要求在外存上以ASCII代码形式存储,则需 要在存储前进行转换 ASCII文件又称文本文件,每一个字节放一个字 符的ASCII代码


每个被使用的文件都在内存中开辟一个相应的 文件信息区,用来存放文件的有关信息(如文 件的名字、文件状态及文件当前位置等) 这些信息是保存在一个结构体变量中的。该结 构体类型是由系统声明的,取名为FILE
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
每个被使用的文件都在内存中开辟一个相应的 文件信息区,用来存放文件的有关信息(如文 件的名字、文件状态及文件当前位置等)
这些信息是保存在一个结构体变量中的。该结 构体类型是由系统声明的,取名为FILE
10.1.5 文件类型指针
声明FILE结构体类型的信息包含在头文件 “stdio.h”中 一般设置一个指向FILE类型变量的指针变 量,然后通过它来引用这些FILE类型变量
说明:
(5) 如果打开失败,fopen函数将会带回一个 出错信息。fopen函数将带回一个空指针值 NULL
常用下面的方法打开一个文件:
if ((fp=fopen(“file1”,’r″))==NULL) {printf(“cannot open this file\n”); exit(0); }
ASCII形式
00110001 00110000 00110000 00110000 00110000
(1)
(0)
(0)
(0)
(0)
二进制形式
00000000 00000000 00100111 00010000
(10000)
10.1.4 文件缓冲区
ANSI C标准采用“缓冲文件系统”处理 数据文件 所谓缓冲文件系统是指系统自动地在内存 区为程序中每一个正在使用的文件开辟一 个文件缓冲区
10.3.3 用格式化的方式读写文件
10.3.4 用二进制方式向文件读写一组数据
10.3.1 怎样向文件读写字符
读写一个字符的函数
函数名
fgetc
调用形式
fgetc(fp)
功能
从fp指向的 文件读入一 个字符
返回值
读成功,带回所读 的字符,失败则返 回文件结束标志E OF(即-1) 写成功,返回值就 是输出的字符;输 出失败,则返回E OF(即-1)
10.1.2 文件名
文件路径表示文件在外部存储设备中的位 文件名 置。如:
D: \CC\temp\file1.dat
表示file1.dat文件存放在D盘中的CC目录下 的temp子目录下面
10.1.2 文件名
命名规则遵循标 文件路径表示文件在外部存储设备中的位 识符的命名规则 置。如:
10.2.1 用fopen函数打开数据文件
fopen函数的调用方式为:
fopen(文件名,使用文件方式);
例如:
fopen(“a1”,”r”);
表示要打开名为“a1”的文件,使用文件方 式为“读入” fopen函数的返回值是指向a1文件的指针
10.2.1 用fopen函数打开数据文件
D: \CC\temp\file1.dat
表示file1.dat文件存放在D盘中的CC目录下 的temp文件名 dat、c、cpp、obj、exe、ppt、 文件路径表示文件在外部存储设备中的位 bmp等) 置。如:
D: \CC\temp\file1.dat
从C程序的观点来看,作为输入输出的各种文件 或设备都是统一以逻辑数据流的方式出现的。 C的数据文件由一连串的字符(或字节)组成, 而不考虑行的界限,两行数据间不会自动加分隔 符,对文件的存取是以字符(字节)为单位的。 输入输出数据流的开始和结束仅受程序控制而不 受物理符号(如回车换行符)控制,这就增加了 处理的灵活性。这种文件称为流式文件。
10.1.2 文件名
文件要有一个唯一的文件标识,以便用户 识别和引用。 文件标识包括三部分:
(1)文件路径
(2)文件名主干
(3)文件后缀
10.1.2 文件名
文件路径表示文件在外部存储设备中的位 文件路径 文件名主干 文件后缀 置。如:
D: \CC\temp\file1.dat
表示file1.dat文件存放在D盘中的CC目录下 的temp子目录下面
常常需要将一些数据输出到磁盘上保存起 来,以后使用 这就要用到磁盘文件
10.1.1 什么是文件
操作系统把各种设备都统一作为文件处理
从操作系统的角度看,每一个与主机相联 的输入输出设备都看作是文件。例如,
终端键盘是输入文件
显示屏和打印机是输出文件
10.1.1 什么是文件
“文件”指存储在外部介质上数据的集合
说明:
fgets函数的函数原型为:
char *fgets (char *str,int n,FILE *fp);
其作用是从文件读入一个字符串
调用时可以写成: fgets(str,n,fp);
说明:
fgets(str,n,fp);中n是要求得到的字符个数 ,但实际上只读n-1个字符,然后在最后加一个 ’\0’字符,这样得到的字符串共有n个字符,把 它们放到字符数组str中
10.1.4 文件缓冲区
从内存向磁盘输出数据必须先送到内存中 的缓冲区,装满缓冲区后才一起送到磁盘 去
如果从磁盘向计算机读入数据,则一次从 磁盘文件将一批数据输入到内存缓冲区( 充满缓冲区),然后再从缓冲区逐个地将 数据送到程序数据区(给程序变量)
10.1.5 文件类型指针
缓冲文件系统中,关键的概念是“文件类 型指针”,简称“文件指针”
fprintf(文件指针,格式字符串,输出表列);
fscanf (文件指针,格式字符串,输入表列); 如: fprintf (fp,”%d,%6.2f”,i,f); fscanf (fp,”%d,%f”,&i,&f);
说明:
(8) 程序中可以使用3个标准的流文件:标准输 入流、标准输出流、标准出错输出流。 系统已对这3个文件指定了与终端的对应关系
标准输入流stdin是从终端的输入
标准输出流stdout是向终端的输出
标准出错输出流stderr是当程序出错时将出 错信息发送到终端
程序开始运行时系统自动打开这3个标准 流文件。因此,程序编写者不需要在程 序中用fopen函数打开它们。所以以前 我们用到的从终端输入或输出到终端都 不需要打开终端文件。
通常将fopen函数的返回值赋给一个指向 文件的指针变量。如:
FILE *fp; fp=fopen(“a1”,”r”); fp和文件a1相联系,fp指向了a1文件
10.2.1 用fopen函数打开数据文件
在打开一个文件时,通知编译系统以下3 个信息:
①需要访问的文件的名字 ②使用文件的方式(“读”还是“写”等) ③让哪一个指针变量指向被打开的文件
表示file1.dat文件存放在D盘中的CC目录下 的temp子目录下面
10.1.3 文件的分类
根据数据的组织形式,数据文件可分为 ASCII文件和二进制文件。
数据在内存中是以二进制形式存储的,如果不 加转换地输出到外存,就是二进制文件
如果要求在外存上以ASCII代码形式存储, 则需要在存储前进行转换 ASCII文件又称文本文件,每一个字节放一 个字符的ASCII代码
第10章 对文件的输入输出
10.1 C文件的有关基本知识
10.2 打开与关闭文件
10.3 顺序读写数据文件
10.4 随机读写数据文件
10.5 文件读写的出错检测
10.1 C文件的有关基本知识
10.1.1 什么是文件 10.1.2 文件名 10.1.3 文件的分类
10.1.4 文件缓冲区
10.1.5 文件类型指针
说明:
(4) 用r+、w+、a+方式打开的文件既可以 用来输入数据,也可以用来输出数据。 用r+方式时该文件应该已经存在。
用w+方式则新建立一个文件,先向此文件 写数据,然后可以读此文件中的数据。 用a+方式打开的文件,原来的文件不被删去 ,文件读写位置标记移到文件末尾,可以添 加,也可以读。
10.1.3 文件的分类
字符一律以ASCII形式存储
数值型数据既可以用ASCII形式存储,也 可以用二进制形式存储
如有整数10000,如果用ASCII码形式输出 到磁盘,则在磁盘中占5个字节(每一个字符 占一个字节),而用二进制形式输出,则在磁 盘上只占4个字节(用VC++ C时)
10.1.3 文件的分类
10.2.2 用fclose函数关闭数据文件
关闭文件用fclose函数。fclose函数调 用的一般形式为
fclose(文件指针); 例如: fclose (fp);
如果不关闭文件将会丢失数据。
10.3 顺序读写数据文件
10.3.1 怎样向文件读写字符
10.3.2 怎样向文件读写一个字符串
如果在读完n-1个字符之前遇到换行符“\n” 或文件结束符EOF,读入即结束,但将所遇到 的换行符“\n”也作为一个字符读入 执行fgets成功,返回str数组首地址,如果一 开始就遇到文件尾或读数据错,返回NULL
说明:
fputs函数的函数原型为:
int fputs (char *str, FILE *fp);
FILE *fp;
10.2 打开与关闭文件
10.2.1 用fopen函数打开数据文件
10.2.2 用fclose函数关闭数据文件
10.2.1 用fopen函数打开数据文件
对文件读写之前应该“打开”该文件,在 使用结束之后应“关闭”该文件。 所谓“打开”是指为文件建立相应的信息 区(用来存放有关文件的信息)和文件缓冲 区(用来暂时存放输入输出的数据)。 所谓“关闭”是指撤销文件信息区和文件 缓冲区
10.1.1 什么是文件
文件有不同的类型,在程序设计中,主要 用到两种文件:
(1) 程序文件。包括源程序文件(后缀为.c)、 目标文件(后缀为.obj)、可执行文件(后缀为 .exe)等。这种文件的内容是程序代码。
10.1.1 什么是文件
文件有不同的类型,在程序设计中,主要 用到两种文件:
相关文档
最新文档