- 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()功能实现后,还要在合适的地方调用该函数,以真正实现保存记录的功能了。由于每次添加、删除、修改记录项
您可能关注的文档
- 撑杆跳高的动力学研究-天津体育学院学报.pdf
- 摩梭走访制下的阿注关系是亲属还是朋友-心理学报.pdf
- 心理学报审稿意见与作者回应题目绩效薪酬对员工突破性创造力和.pdf
- 支持脚本嵌入的web工作流的研究与实现-计算机系统应用.pdf
- 心理契约违背与员工离职倾向关系的实证研究-中华人力资源发展学会.pdf
- 心理所有权和犬儒主义在包容性领导对员工离职倾向影响中的中介作用.pdf
- 心联网及其哲学探析-东北大学.pdf
- 心脏外科术后发生胃肠道并发症的必威体育精装版进展-中国循证医学杂志.pdf
- 改进的基于小波变换的语音活动检测算法-武汉大学学报·信息科学版.pdf
- 思考作文命题背景下的思考写作.doc
- 2023年江苏省镇江市润州区中考生物二模试卷+答案解析.pdf
- 2023年江苏省徐州市邳州市运河中学中考生物二模试卷+答案解析.pdf
- 2023年江苏省苏州市吴中区中考冲刺数学模拟预测卷+答案解析.pdf
- 2023年江苏省南通市崇川区田家炳中学中考数学四模试卷+答案解析.pdf
- 2023年江西省吉安市中考物理模拟试卷(一)+答案解析.pdf
- 2023年江苏省泰州市海陵区九年级(下)中考三模数学试卷+答案解析.pdf
- 2023年江苏省苏州市高新二中中考数学二模试卷+答案解析.pdf
- 2023年江苏省南通市九年级数学中考复习模拟卷+答案解析.pdf
- 2023年江苏省南通市海安市九年级数学模拟卷+答案解析.pdf
- 2023年江苏省泰州市靖江外国语学校中考数学一调试卷+答案解析.pdf
文档评论(0)