- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
文件读写操作-read
文件读写操作
上一讲我们学习了事件和事件处理函数的有关知识,并为Mp3Collect程序添加的进行记录操作的代码,但是程序还缺少保存记录的功能,以至于当程序退出之后,我们辛苦输入的记录就丢失了,因此在本讲中,我们就首先来学习有关文件读写操作的知识,然后继续添加事件处理函数,实现查询记录的功能。
在应用程序中保存信息和数据的常用方法有三种:第一种是保存在Windows的注册表中,第二种是保存在程序专用的文件中,第三种则是保存在数据库中。第一种方法只适合于保存少量关键的信息,例如程序的参数和选项,对于我们的例子程序来说,歌曲记录的数量可以是非常多的,因此不适合保存在注册表中。第二种方法是最常用的,也比较容易实现,因此现在我们先采用第二种方法来保存记录。第三种方法对于保存大量结构化的数据是最有效的,例如Mp3Collect的歌曲记录,但实现起来相对要复杂得多,在讲座的后面我们再来学习数据库操作方法。
用于文件操作的函数也有很多种,我们选择使用I/O流函数和FILE *指针来进行对文件的操作,因为这些函数符合ANSI C/C++规范,可移植性较好,能够用于Win32、Unix平台,是比较常用的文件操作方式。I/O流函数和FILE结构的声明和定义位于头文件stdio.h中。
保存记录文件
下面介绍如何保存文件记录。
首先,为主窗体类添加一个SaveFile()成员函数。在类浏览器中找到TMainForm类,用右键单击该类,在关联菜单中选择New Method命令,就会弹出如图10-1所示的Add Method对话框。在其中的Method Name中输入新的成员函数名SaveFile,函数的参数(Arguments)为空,返回类型为void,即没有返回值。函数的访问权限为私有的(Private),函数的调用方式为__fastcall,这是因为按照CBuilder的规定,所有窗体类的成员函数的调用方式都必须为__fastcall方式。设置好这些函数属性后,按下“OK”按钮,CBuilder就会自动添加好SaveFile()函数的框架。
接下来在SaveFile()函数中添加代码,实现保存文件的功能。我们约定保存记录的文件名为Mp3Collect.sav,文件目录为当前工作目录,当前工作目录是通过调用GetCurrentDir()函数获得的。文件的格式为普通的文本文件,每个列表项的内容以字符串的方式写入文件中,其中每个字符串为单独的一行,因此每个列表项在文件中占三行。在对文件进行I/O流操作之前,首先需要打开文件,并获取文件的FILE*指针。
我们通过fopen()函数以文本以及创建新文件的方式打开Mp3Collect.sav文件,然后读取ListView1中的列表项,利用函数fprintf()将每个列表项的内容写入文件中。下面SaveFile()函数的实现代码:
void __fastcall TMainForm::SaveButtonClick(TObject *Sender)
{
FILE * fp;
//获取当前工作目录,并构造含路径的文件全名。其中,文件名与路径用斜线\分开,
//在CBuilder中用双引号构造字符串时,连续两个斜线表示实际字符串中的一个斜线。
AnsiString sFilePath =GetCurrentDir()+AnsiString(\\Mp3Collect.sav);
//fopen函数的第一个参数表示文件名。第二个参数为打开文件的方式,其中w表示以创建
//文件打开,t表示以文本方式打开。
fp=fopen(sFilePath.c_str(),wt);
//fopen返回文件指针,如果为无效的指针,则显示出错信息并返回
if(fp==NULL){
ShowMessage(不能打开文件Mp3Collect.sav,请检查是否为共享冲突);
return;
}
int i;
TListItem * theItem;
//循环遍历列表框ListView1的所有列表项
for(i=0;iListView1-Items-Count;i++){
//通过ListView1的Items属性获得它的第i个列表项
theItem=ListView1-Items-Item[i];
//将列表项中的记录信息分别写入文件中,每个字符串后插入回车换行字符。
fprintf(fp,%s\n\r%s\n\r%s\n\r,theItem-Caption,
theItem-SubItems-Strings[0],theItem-SubItems-Strings[1]);
}
//关闭文件
fclose(fp);
}
SaveFile()功能实现后,还要在合适的地方调用该函数,以真正实现保存记录的功能了。由于每次添加、删除、修改记录项
您可能关注的文档
最近下载
- 地铁物业管理培训课件.pptx
- 工程数学(本)形成性考核作业4.doc
- GB T 34520.7-2017 连续碳化硅纤维测试方法 第7部分:高温强度保留率 标准.pdf
- 自编教材审核表(模板).pdf
- 一例慢性阻塞性肺疾病急性加重期合并II型呼吸衰竭患者的个案护理PPT.pptx
- [大庆]黑龙江大庆市民政局所属事业单位选调事业编制工作人员笔试上岸试题历年高频考点难、易错点附带答案详解.docx VIP
- ISO9001 14001 ISO45001检查表审核方法全套.docx VIP
- 增光膜规格说明书.pdf
- 人教版数学四年级第一单元教材解读及集体备课课件.pptx VIP
- 2024 离婚协议书 离婚协议(打印版).docx
文档评论(0)