c++学习 文件和流

上传人:第*** 文档编号:55743838 上传时间:2018-10-05 格式:PPT 页数:38 大小:115KB
返回 下载 相关 举报
c++学习 文件和流_第1页
第1页 / 共38页
c++学习 文件和流_第2页
第2页 / 共38页
c++学习 文件和流_第3页
第3页 / 共38页
c++学习 文件和流_第4页
第4页 / 共38页
c++学习 文件和流_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《c++学习 文件和流》由会员分享,可在线阅读,更多相关《c++学习 文件和流(38页珍藏版)》请在金锄头文库上搜索。

1、第16章 文件和流,杜红燕 长沙学院计算机系 Tel: 13755196811 Email: ,讲授内容,文件和流的概念 使用FILE结构操作文件 使用文件流操作文件,16.1 基本概念(1/4),文件可以保存程序运行的结果 文件使程序操作大量数据成为可能 大型系统的运行需要文件支持,16.1 基本概念(2/4),文件是一组相关联的数据的集合 C+将文件看成有序的字节流 文件被打开后,操作系统为该文件建立的一个缓冲区,或称为一个字节序列,即流,16.1 基本概念(3/4),文件 普通文件 二进制文件 文本文件 输入输出设备:键盘、显示器、打印机等 标准输入流(用指针stdin操作) 标准输出流

2、(用指针stdout操作) 标准错误流(用指针stderr操作) C+采用相同的方式操作普通文件和I/O设备,16.1 基本概念(4/4),文件的操作 格式化输入输出(文本) 块输入输出(二进制),16.2 用FILE结构操作文件(1/4),打开一个已存在的文件或建立并打开一个新文件 FILE *fopen( const char *filename, const char *mode ); filename路径及文件名 mode打开方式,16.2 用FILE结构操作文件(2/4),注:各种打开方式可以组合,例子1:使用FILE指针新建一个文本文件,写入了字符串“This is a test

3、file. “,/文件ex16_1.cpp #include main() FILE *fptr; /定义FILE指针/打开或创建文件if (fptr = fopen(“test.txt“,“w“) != NULL) /往文件中写入字符串fprintf(fptr, “This is a test file.“);fclose(fptr); /关闭文件elseprintf(“Open file error.n“);return 0; ,1、int fputc( int c, FILE *stream );该函数有两个参数,分别表示将要写入的字符c和写入数据的文件对应的流stream,该函数将c写

4、入流stream中,并将写入的字符作为结果返回,如果写入过程中出现错误,该函数返回文件结束标志EOF。 2、int fputs( const char *string, FILE *stream );该函数的两个参数分别表示将写入的字符串string和写入数据的文件对应的流stream,该函数将字符串string写入流stream中,如果写入成功,函数返回非负的整数,否则返回文件结束标志EOF。,写文件函数,3、int fprintf( FILE *stream, const char *format , argument .);fprintf函数与printf函数非常相似,只是fprintf

5、函数多了一个参数stream以表示写入数据的文件对应的流,该函数的功能是将数据按照格式控制串format写入到流stream中,如果写入成功,函数返回写入的字节数,否则返回一个负数表示错误。,写文件函数,4、size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );函数fwrite可以把从内存中指定位置开始的指定个数的字节以二进制的方式写入文件。函数fwrite有四个参数 其中第一个参数buffer是一个指针,它指向内存中要写入文件的数据的首地址; 第二个参数size是要写入文件的数据对象的大小,我

6、们一般使用运算符sizeof计算数据对象所占空间的字节数; 第三个参数提供要写入的数据对象的数目; 第四个参数是文件指针,它指明了要写入数据的流。函数fwrite实际上可以一次将从buffer开始的、size*count个字节的数据写入流stream中。如果写入成功,该函数返回写入的数据对象的数目,如果发生了错误,函数的返回值肯定小于count。,写文件函数,例子2:将字符、字符串、整数、浮点数、结构等类型的数据写入文件(1/2),/文件ex16_2.cpp ,写文件 #include struct Testint a;double b; ; main() Test st;st.a = 10;

7、st.b = 1.1;FILE *fptr; /声明文件指针/打开文件if(fptr=fopen(“writetest.dat“,“wb“)!=NULL),例子2:将字符、字符串、整数、浮点数、结构等类型的数据写入文件(2/2),/以二进制方式写入数据fwrite( ,1、int fgetc( FILE *stream );该函数从流stream的当前位置读取一个字符,以int类型返回,如果出错或已经到达了文件结束的位置,将返回文件结束标志EOF。 2、char *fgets( char *string, int n, FILE *stream );该函数从流stream中的当前位置开始读取字

8、符串,判断字符串结束位置的条件是:直到遇到换行符(读入该换行符),或到达文件结束位置,或读取了n-1个字符。读取的字符串存入string所指的内存单元中,并在所有读取的字符之后添加0。如果读取成功,函数返回string,如果出错或读取前已经到达了文件结束的位置,将返回NULL。,读文件函数,3、int fscanf( FILE *stream, const char *format , argument . );fscanf函数与scanf函数非常相似,只是fscanf函数多了一个参数stream以表示读取数据的流,该函数的功能是将数据按照格式控制串format从流stream中读取并转换成数

9、据以存入相应的参数中,如果读取成功,该函数返回转换成功的参数的数目,如果出错或读取前已经到达了文件结束的位置,将返回文件结束标志EOF。,读文件函数,4、size_t fread( void *buffer, size_t size, size_t count, FILE *stream );函数fread的作用是从文件的当前位置读取指定字节数的数据放入到内存的指定位置 第一个参数buffer是一个指针,指明了内存中要放入数据的位置; 函数fread的后面三个参数与函数fwrite的后面三个参数的意义相同,给出了要读取数据对象的字节数、数目以及被读取的流。 函数fread实际上可以从流stre

10、am的当前位置一次性读取size*count个字节的数据并存入buffer中。 如果读取成功,该函数返回成功读取的数据对象的数目,如果发生了错误,函数的返回值肯定小于count。 5、int feof( FILE *stream );该函数判断stream是否已经到达了文件的结束位置,如果是,返回非0值,否则返回0。,读文件函数,例子3:将例1创建的文件中的数据读出来(1/2),/文件ex16_3.cpp /打开文件并读取其中的数据 #include main() /定义FILE指针FILE *fptr;char s80;/打开文件if (fptr = fopen(“test.txt“,“r“

11、) != NULL)/从文件中读取一个字符串fgets(s,80,fptr);,例子3:将例1创建的文件中的数据读出来(2/2),printf(“Data from File : %sn“,s);/关闭文件fclose(fptr);elseprintf(“Open file or create file error.n“);/再次打开文件if (fptr = fopen(“test.txt“,“r“) != NULL)printf(“Read words one by one:n“);while (!feof(fptr)fscanf(fptr, “%s“, s);printf(“t%sn“,s

12、);/关闭文件fclose(fptr);elseprintf(“Open file or create file error.n“);return 0; ,例子4:将例2创建的文件中的数据读出来(1/2),/文件ex16_4.cpp,读二进制文件 #include struct Testint a;double b; ; main() Test st;char s20;int m;float n;char c;FILE *fptr;if(fptr=fopen(“writetest.dat“,“rb“)!=NULL),例子4:将例2创建的文件中的数据读出来(2/2),fread( ,16.2 用

13、FILE结构操作文件(3/4),文件位置指针 文件的每次读写操作都在文件位置指针处进行,16.2 用FILE结构操作文件(4/4),文件位置指针可以修改 int fseek(FILE *, long, int); 第一个参数文件指针 第二个参数偏移量 第三个参数基准,可以为SEEK_SET、SEEK_CUR和SEEK_END,分别表示文件的起始位置、当前位置和文件尾,例子5:将例2创建的文件中的数据读出来,跳过字符a和字符串“Beijing” (1/2),/文件ex16_5.cpp,读文件 #include struct Testint a;double b; ; main() Test st

14、;int m;float n;FILE *fptr;if(fptr=fopen(“wrtest.txt“,“rb“)!=NULL)fread(,例子5:将例2创建的文件中的数据读出来,跳过字符a和字符串“Beijing” (2/2),/修改文件位置指针,跳过字符a和字符串Beijingfseek(fptr,8,SEEK_CUR);fscanf(fptr,“ %d %f “, ,16.3 通过文件流进行操作(1/5),几个特殊的流对象 标准输出流对象cout 标准输入流对象cin 非缓冲标准错误流对象cerr 缓冲标准错误流对象clog,16.3 通过文件流进行操作(2/5),和文件流相关的几个

15、类 类ifstream文件的输入 类ofstream文件的输出 类fstream文件的输入输出 上述三个类都在头文件中,16.3 通过文件流进行操作(3/5),文件流类的继承关系,例子5:使用文件流新建或打开一个文件,并写入字符串“This is a test file. “,/文件ex16_6.cpp,新建和打开文件 #include main() /声明文件流对象ofstream outFile(“outFile.txt“,ios:out);if (!outFile)/使用错误流对象输出错误信息cerr“Open file or create file error.“endl;else/输

16、出数据到与对象outFile 关联的文件中outFile “This is a test file.“;return 0; ,16.3 通过文件流进行操作(4/5),类fstream打开文件的方式,16.3 通过文件流进行操作(5/5),ofstream outFile(“outFile.txt“,ios:out); 可以改写为:ofstream outFile;outFile.open(“outFile.txt“,ios:out); 或ofstream outFile;outFile.open(“outFile.txt“); 文件可以显式关闭:outFile.close();,例子6:使用文件流的方式将整数、浮点数、字符串等类型的数据写入文件,/文件ex16_7.cpp,写文件 #include main() ofstream outFile (“outFile.txt“, ios:out);if (!outFile )cerr“Open file or create file error.“endl;elseoutFile 5“string“ “1.2;outFile .close();return 0; ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号