14 chapter 文件处理(cpp大学教程)学习笔记

14.1 文件和流

文件

1、内存中数据的存储是临时的,而用文件存储的数据是永久的——文件被储存在辅助存储设备中,如硬盘、CD、DVD、闪存驱动器和磁带

特点

每个文件都以一个文件结束符或者以存储在操作系统维护、管理的数据结构中的一个特定字节数

文件处理模板

  • typedef ifstream是一个对basic_ifstream的特化,允许文件输入字符

  • typedef ofstream是一个对basic_ofstream的特化,允许文件输出字符

  • typedef fstream是一个对basic_fstream的特化,允许文件输入、输出字符

注意:该模板都是从basic_iostream\basic_istream\basic_ostream中“继承”而来,包含其所有的成员函数

14.2 创建顺序文件

打开一个文件

 ofstream outputFile("credit.dat", ios::out);
 if(!outputFile){cerr<<"File could not be opened";exit(EXIT_FAILURE);}

打开文件有两个参数:文件名和文件打开模式

文件名:若文件不存在,则自动创建该文件名的文件

文件打开模式ios::out——向一个文件输出数据:默认截顶,会自动清空文件里的数据重新输出

ofstream对象默认为ios::out文件打开模式

模式描述
ios::app将输出文件添加到文件尾,不截顶
ios::ate可以再文件任何位置输出数据,默认为文件尾
ios::in打开文件输入
ios::out打开文件输出,截顶
ios::trunc丢弃文件的内容
ios::binary打开一个文件进行二进制输入/输出

使用open打开一个文件

 ofstream outputFile;
 outputFile.open("credit.dat", ios::out);

14.3 从顺序文件中读取数据

 ifstream inFile("credit.dat", ios::in);
 if(!inFile){cerr<<"File coule not be opened";exit(EXIT_FAILURE);};

默认为输入打开模式,也可以使用open成员函数打开文件

文件定位指针

seekg()成员函数重定位下一个文件读入的字节号

seekp()成员函数重定位下一个文件输出的字节号

传递给重定位成员函数的第一个参数通常是一个long类型的整数

参数2作用
ios::beg从流的开始位置定位
ios::cur从流的当前位置进行定位
ios::end相对于流的结尾进行定位

tellg();tellp();用于高速下一个文件输入/输出的字节号

14.4 随机存取文件

输出和读取

  • 成员函数write()从文件中“put”文件定位指针的位置开始输出固定数目的字节到指定的流

  • 成员函数read()从文件“get”文件定位指针的位置开始读入固定数目的字节数据

成员函数write()输出字节数据

outputFile.write(reinterpret_cast<const char*>(&client), sizeof(ClientData));

write()函数将第一个参数作为一组字节数据,将内存中的对象看做const char*类型,表示指向一个字节的指针;第二个参数为输出的字节数

reinterpret_cast<>()运算符转换指针类型

作用:把某种类型强制转换为其他无关类型

注意:该转换是在编译阶段完成,不会改变指针所指对象的类型

string类成员函数copy()

 string string1 = "stringCopy";
 char string2[10];
 string1.copy(string2, 10);

成员函数copy()的两个参数:

第一个参数:将要复制赋值的string数组

第二个参数:要复制的字符个数

用二进制模式打开一个输出文件

 ofstream outputFile("credit.dat", ios::out|ios::binary);

通过运算符"|"可以组合多种打开模式

成员函数read()读取文件数据

inFile.read(reinterpret_cast<char*>(&client), sizeof(ClientData));

第一个参数:要求的参数类型为char *,需用强制类型转换

第二个参数:读取的字符数

判断是否读取到文件尾

 while(inFile && !inFile.eof()){};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值