Presentation is loading. Please wait.

Presentation is loading. Please wait.

第十一章 IO流与文件系统 丘志杰 电子科技大学 计算机学院 软件学院.

Similar presentations


Presentation on theme: "第十一章 IO流与文件系统 丘志杰 电子科技大学 计算机学院 软件学院."— Presentation transcript:

1 第十一章 IO流与文件系统 丘志杰 电子科技大学 计算机学院 软件学院

2 I/O系统的作用 I/O系统为程序与I/O设备之间进行数据交互提供了途径。 应用程序 I/O系统 键盘 显示器 文件 磁 盘
2019/5/5 电子科技大学计算机学院 软件学院

3 C++为何有自己的I/O系统 C语言的标准输入输出函数和只能处理基本数据类型,对用户自定义类型无能为力。
2019/5/5 电子科技大学计算机学院 软件学院

4 C++流库的结构 C++流库是从继承方法建立起来的一个输入/输出类库,它具有两个平行的基类,即streambuf类和ios类,所有其他的流类都是从它们直接或间接地派生出来的。 streambuf类提供对缓冲区的低级操作: streambuf filebuf strstreambuf conbuf 2019/5/5 电子科技大学计算机学院 软件学院

5 ios类及其派生类提供用户使用流类的接口:
istream ostream fstreambase strstreambase ifstream istrstream ofstream ostrstream constream fstream strstream iostream istream-withassign ostream-withassign iostream-withassign 2019/5/5 电子科技大学计算机学院 软件学院

6 有关头文件和预定义流对象 包含常用流类声明的头文件: 当开始执行C++程序时,有几个自动打开的预定义流:
iostream.h——支持标准I/0操作 fstream.h ——支持文件I/0操作 strstream.h ——支持串I/0操作 iomanip.h——支持大多数流操纵符 当开始执行C++程序时,有几个自动打开的预定义流: cin——标准输入 cout——标准输出 cerr——不带缓冲标准出错信息输出 clog——带缓冲标准出错信息输出 2019/5/5 电子科技大学计算机学院 软件学院

7 输入和输出 istream和ostream是用户使用流库的主要界面之一。
istream提供了主要的输入操作,可以通过istream完成如下操作: 从输入流中获取单个字符。 从输入流中获取一行数据。 从输入流中获取指定字节数的数据。 将文件指针移动到指定位置,等等。 2019/5/5 电子科技大学计算机学院 软件学院

8 ostream提供了主要的输出操作,可以通过ostream完成如下操作:
刷新输出流。 向输出流中写入指定字节数的数据。 将文件指针移动到指定位置,等等。 istream和ostream分别重载了>>和<<两个运算符,用户可以很方便地使用这两个运算符对预定义类型进行输入和输出。用户也可以重载这两个运算符,从而能够输入和输出自定义类的对象。 2019/5/5 电子科技大学计算机学院 软件学院

9 格式控制 C++提供了两种格式控制的方法: 使用操作符 使用ios类中实现格式控制的成员函数 2019/5/5
电子科技大学计算机学院 软件学院

10 使用操作函数控制格式 C++ I/O流库提供了一些操作符(如下表所示),可以直接嵌入到输入/输出语句中来实现特殊格式的控制。
2019/5/5 电子科技大学计算机学院 软件学院

11 setbase(int) 设置基(0,8,10,16) output resetiosflags(long ) 清除参数指定的格式位 I/O
dec 以十进制为基 I/O oct 以八进制为基 I/O hex 以十六进制为基 I/O ws 提取输入中的空白 input endl 插入换行并刷新流 output ends 在串后插入终止符 output flush 刷新流 output setbase(int) 设置基(0,8,10,16) output resetiosflags(long ) 清除参数指定的格式位 I/O setiosflags(long ) 设置参数指定的格式位 I/O setfill(int ) 设置填充字符 I/O setprecision(int) 设置显示精度 I/O setw(int) 设置显示域宽 I/O 2019/5/5 电子科技大学计算机学院 软件学院

12 例子 void main() { int a=100; cout<<hex<<a<<endl;
cout<<oct<<a<<endl; cout<<dec<<a<<endl; }//结果: 64 144 100 2019/5/5 电子科技大学计算机学院 软件学院

13 使用ios类成员函数格式化 输入输出的格式由各种格式状态标志来确定。这些状态标志在状态量中各占一位,它们在ios类中定义为枚举量,如下表所示。 这些成员函数的功能包括: 设置格式状态标志(setf) 清除格式状态标志(unsetf) 获取格式状态标志(flag) 设置域宽、填充字符和设置精度(width、fill、precision等) 2019/5/5 电子科技大学计算机学院 软件学院

14 internal 在引导符或基指示符后填入字符 output dec 以十进制为基 I/O oct 以八进制为基 I/O
skipws 跳过输入中的空白 input left 左对齐输出 output right 右对齐输出 output internal 在引导符或基指示符后填入字符 output dec 以十进制为基 I/O oct 以八进制为基 I/O hex 以十六进制为基 I/O showbase 在输出中显示基指示符 output showpoint 在输出中显示小数点 output uppercase 十六进制输出时,字母大写 output showpos 正整数前显示“+” output scientific 科学计数法显示浮点数 output fixed 定点形式显示浮点数 output unitbuf 在输出后立即刷新所有流 output stdio 输出后刷新stdout和stderr output 2019/5/5 电子科技大学计算机学院 软件学院

15 例子 void main() { int a=20; double b=111.11;
cout.setf(ios::showpos|ios::scientific); cout<<a<<endl; cout<<b<<endl; }//结果: +20 e+002 2019/5/5 电子科技大学计算机学院 软件学院

16 文件I/O C++把文件看作是字符序列。根据数据的组织形式,文件可分成ASCII文件和二进制文件两种。
ASCII文件又称为文本文件,它的每一个字节放一个ASCII代码,代表一个字符,这样便于对字符进行处理,也便于输出,但占用存储空间较多。 二进制文件是把内存的数据,按其在内存中的存储形式原样写到磁盘上。用二进制形式输出数据,可节省外存空间和转换时间,但一个字节并不对应一个字符。一般,中间结果常用二进制文件保存,以减少外存开销。 2019/5/5 电子科技大学计算机学院 软件学院

17 C++中进行文件I/O的基本过程 在C++中,要进行文件的I/O,必须首先创建一个流,然后将这个流与文件相关联,即打开文件,此时才能进行读/写操作,完成后再关闭这个文件。 2019/5/5 电子科技大学计算机学院 软件学院

18 文件的打开和关闭 C++有三种类型的文件流:输入文件ifstream,输出文件流ofstream,输入/输出文件流fstream。这些文件流都定义在fstream.h中。 要执行文件输入/输出,须做三件事: 在程序中要包含头文件fstream.h 建立流。建立流的过程就是定义流类的对象。 使用open()函数打开文件,也就是使某一文件与上面的某一流相联系。 2019/5/5 电子科技大学计算机学院 软件学院

19 举例 #include <string.h> #include <fstream.h> void main() {
char buf[32]; ifstream in; memset(buf,0,sizeof(buf)); in.open("c:\\test.txt",ios::in); in>>buf; in.close(); ofstream out; out.open("c:\\test.txt",ios::out); strcat(buf," "); out<<buf; out.close(); } 2019/5/5 电子科技大学计算机学院 软件学院


Download ppt "第十一章 IO流与文件系统 丘志杰 电子科技大学 计算机学院 软件学院."

Similar presentations


Ads by Google