第23讲文件输入和输出 教学目的和要求: 了解使用文件输入输出的过程。 掌握文件的打开和关闭及文件的读写 教学内容提要: 1、文件的打开和关闭; 2、文件的读写; 教学重点:文件的打开和关闭及文件的读写。 教学难点:文件的打开和关闭及文件的读写。 教学进度:P261~P274 教学过程:
第23讲 文件输入和输出 教学目的和要求: 了解使用文件输入输出的过程。 掌握文件的打开和关闭及文件的读写。 教学内容提要: 1、文件的打开和关闭; 2、文件的读写; 教学重点:文件的打开和关闭及文件的读写。 教学难点:文件的打开和关闭及文件的读写。 教学进度:P261~P274 教学过程:
231文件的打开与关闭 1文件的打开 为了对一个文件进行读写操作,应先 打开”该文件;在使用结束后,则应 关闭”文件。在C++中,打开一个文 件,就是将这个文件与一个流建立关联; 关闭一个文件,就是取消这种关联
23.1 文件的打开与关闭 1.文件的打开 为了对一个文件进行读写操作,应先 “打开”该文件;在使用结束后,则应 “关闭”文件。在C++中,打开一个文 件,就是将这个文件与一个流建立关联; 关闭一个文件,就是取消这种关联
要执行文件的输入输出,须做三件事: 1)在程序中包含头文件 ream. h; (2)建立流。建立流的过程就是定义流类的对象,例如: fstream in: ofstream out: fstream both 分别定义了输入流对象in;输出流对象out,输入输出流 对象both。 (3)使用open函数打开文件,也就是使某一文件与上面的某 一流相联系。 open函数是上述三个流类的成员函数,其原 型是在 fstream. h中定义的,原型为: void open( const unsigned char*, int mode, int access=filebuf: openprot)
要执行文件的输入输出,须做三件事: (1) 在程序中包含头文件fstream.h; (2) 建立流。建立流的过程就是定义流类的对象,例如: ifstream in; ofstream out; fstream both; 分别定义了输入流对象in;输出流对象out,输入输出流 对象both。 (3) 使用open()函数打开文件,也就是使某一文件与上面的某 一流相联系。open()函数是上述三个流类的成员函数,其原 型是在fstream.h中定义的, 原型为: void open(const unsigned char*,int mode,int access=filebuf::openprot);
说明: )、 filename是文件名字,它可包含路径说明。 2)、mode说明文件打开的模式,它对文件的操作影响重大, mode的取值必须是以下值之一: los::In 打开文件进行读操作 1os:: out 打开文件进行写操作 ios:: ate 打开时文件指针定位到文件尾 10S:: app 添加模式,所有增加都在文件尾部进行 os:: trunc 如果文件已存在则清空原文件 los:: nocreate 如果文件不存在则打开失败 10S::noreplace 如果文件存在则打开失败 ios: binary 二进制文件(非文本文件) 对于 ifstream流,mode的默认值为ios:in;对于 ofstream流 ,mode的默认值为ios:out。 3)、prot决定文件的访问方式,取值为: 0普通文件 1只读文件 2隐含文件 4系统文件 般情况下,该访问方式使用默认值
说明: 1)、filename是文件名字,它可包含路径说明。 2)、mode说明文件打开的模式,它对文件的操作影响重大, mode的取值必须是以下值之一: ios::in 打开文件进行读操作 ios::out 打开文件进行写操作 ios::ate 打开时文件指针定位到文件尾 ios::app 添加模式,所有增加都在文件尾部进行 ios::trunc 如果文件已存在则清空原文件 ios::nocreate 如果文件不存在则打开失败 ios::noreplace 如果文件存在则打开失败 ios::binary 二进制文件(非文本文件) 对于ifstream流,mode的默认值为ios::in;对于ofstream流 ,mode的默认值为ios::out。 3)、prot决定文件的访问方式,取值为: 0 普通文件 1 只读文件 2 隐含文件 4 系统文件 一般情况下,该访问方式使用默认值
2文件的关闭 在使用完一个文件后,应该把它关闭 所谓关闭,实际上就是使打开的文件与流 “脱钩”。关闭文件可使用cos0函数完成, close函数也是流类中的成员函数,它不带 参数,不返回值。例如: 将关闭与流out相联接的文件
2.文件的关闭 在使用完一个文件后,应该把它关闭。 所谓关闭,实际上就是使打开的文件与流 “脱钩”。关闭文件可使用close()函数完成, close()函数也是流类中的成员函数,它不带 参数,不返回值。例如: 将关闭与流out相联接的文件
232文件的读写 文件读写方法 (1)使用流运算符直接读写。 文件的读/写操作可以直接使用流的插入运算符“>”,这些运算符将完成文件的字符转换 工作。 (2)使用流成员函数 常用的输出流成员函数为:pu函数、 write函数、输 出流随机访问函数有sekp和 tello 常用的输入流成员函数如下:get函数、 getline函数、 read函数,输入流随机访问函数有 seekg和tell
23.2 文件的读写 1. 文件读写方法 ◼ (1)使用流运算符直接读写。 文件的读/写操作可以直接使用流的插入运算符“>”,这些运算符将完成文件的字符转换 工作。 ◼ (2)使用流成员函数 常用的输出流成员函数为:put函数、write函数、输 出流随机访问函数有seekp和tellp。 常用的输入流成员函数如下:get函数、getline函数、 read函数,输入流随机访问函数有seekg和tellg
例23.9把一个整数、一个浮点数和一个字符串写到 磁盘文件tes中 #includesfstream h int maino ofstream fou fout open( test); if fout) t cout<<" Cannot open output fileIn, "r return fout<<10<<<<123.456<<t"<<This is a text file. \n" fout. close return 0:
例23.9 把一个整数、一个浮点数和一个字符串写到 磁盘文件test中。 #include int main() { ofstream fout; fout.open("test"); if (!fout) { cout<<"Cannot open output file\n,"; return 1; } fout<<10<<" "<<123.456<<"\t" <<“This is a text file.\n"; fout.close(); return 0; }
2二进制文件的读写 二进制文件不同于文本文件,它可用于任何类型的文件 (包括文本文件),读写二进制文件的字符不作任何转换, 读写的字符与文件之间是完全一致的。 (1)用geO函数和pu0函数读写二进制文件 getO函数有许多格式,其中最常用的版本原型如下: istream& get(char& ch) getO函数从相关流中只读一个字节,并把该值放入ch中并 返回该流,当到达文件尾时,使该流的值为0。 puO函数的原型如下: ostream& put(char ch); puO函数将ch写入流中并返回该流
2.二进制文件的读写 二进制文件不同于文本文件,它可用于任何类型的文件 (包括文本文件),读写二进制文件的字符不作任何转换, 读写的字符与文件之间是完全一致的。 (1) 用get()函数和put()函数读写二进制文件 get()函数有许多格式,其中最常用的版本原型如下: istream& get(char& ch); get()函数从相关流中只读一个字节,并把该值放入ch中并 返回该流,当到达文件尾时,使该流的值为0。 put()函数的原型如下: ostream& put(char ch); put()函数将ch写入流中并返回该流
例23.11将‘a”至‘z的26个英文字母写入文件,而后从该文 件中读出并显示出来。 #includesiostream. h> #include void test write i ofstream fs fs. open("d: test. dat); int i: char c='a"’; for(i=0; i<26; i++fs. put(c);c++; fs. closed void test reado i ifstream fs(d: lItest. dat"); char c; while(fs. get(c)cout<<c fs. closed void maino i test write; test read;
例23.11 将‘a’ 至‘z’ 的26个英文字母写入文件,而后从该文 件中读出并显示出来。 #include #include void test_write() { ofstream fs; fs.open("d:\\test.dat"); int i; char c='a'; for (i=0;i<26;i++){fs.put(c); c++; } fs.close() } void test_read() { ifstreamfs("d:\\test.dat"); char c; while(fs.get(c)) cout<<c; fs.close() } void main() { test_write(); test_read(); }
(2)用 readi函数和 write0函数读写二进制文件 reado-和 write原型如下: istream &read(unsigned char* buf, int num); ostream &write(const unsigned char* buf, int num):
(2) 用read()函数和write()函数读写二进制文件 read()和write()原型如下: istream &read(unsigned char* buf,int num); ostream &write(const unsigned char* buf,int num);