




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习Symbian第七课今天,我们来做一个小程序,是关于文本文件的读取与写入的,文本文件是最基本的操作。先看看程序运行的效果吧首先,给程序添加两个菜单用于打开和保存文件。当你选打开文件菜单时,程序读入“C:Hello.txt”文件(这里的C盘不是电脑的C盘,而是手机模拟器的C盘),并显示在编辑框中。接着你可以在编辑框中对文本内容进行修改。改完后选择保存菜单,程序就把编辑框中的内容追加到原来的文件中保存下来。最后你可以再次选择打开菜单,这是你会发现第二次读入的文件和第一次读入的不同了,在文件后面多了上次编辑的内容。程序涉及到的知识点1. 关于菜单和编辑框的操作是前几课讲的内容,我就不重复了。2. 文件和文件流的操作。文件的操作要用到“f32file.h”头文件和“efsrv.lib”链接库,他提供了文件的创建删除复制等常规操作,能读取文件属性,读取文件内容等。因为要保存文件,所以要用到文件流的操作,这就要用到“s32file.h”头文件和“estor.lib”链接库。3. Unicode8编码我们在读取写入文件时,使用的是二进制来操作,文件中也是以8位的byte二进制数据来存储文件的,一个8位的byte最多能存储256个不同的信息,这样如果存储英文,那也是绰绰有余了。但是汉字远不止256个啊,要存储汉字信息,这就要用双字节来存储,也就是说用两个字节共同来表示一个汉字,这就是Unicode编码。还有,手机程序中的编辑框所能接受的字符编码是Unicode编码,而文件流中的编码是单字节的字节流,这样在读取文件到编辑框中显示是需要转码的,从编辑框中保存到文件的过程也是要转码的。关于汉字的编码我还是能说上个一二来,我曾有一篇文章让Flash能读会写就发表在软件报上面。在塞班程序中是不需要手动转码的,因为“utf.h”这个头文件里提供了转码的API,我们只要拿过来用就可以了。程序制作过程:一 新建一个多页面框架模版程序Test。二 用记事本手动新建一个文本文件,输入“这是第一个Symbian程序!”并保存C:Symbian8.0aS60_2nd_FP2_SCepoc32winscHello.txt,注意保存时选择文件的编码为“UTF-8”。我们先准备一个文本文件让程序导入。三 在Test . rss和Test . hrh创建和注册菜单,在TestView . cpp中编写程序响应代码。四 在TestContainer.h中注册编辑框的类和定义编辑框变量,添加读取和保存文件的公共函数。五 在TestContainer.rss文件中,创建编辑框,编写读写文件的实现代码。六 添加链接库“eikctl.lib bafl.lib efsrv.lib charconv.lib estor.lib”最后,编译测试程序。附上程序代码:TestContainer.h源码(菜单的代码就没贴出来了,需自己写)#ifndef TESTCONTAINER_H#define TESTCONTAINER_H#include class CEikLabel; / for example labelsclass CEikEdwin;class TResourceReader;class CTestContainer : public CCoeControl, MCoeControlObserver public: / Constructors and destructor void readFileToEdit();void saveEditToFile(); void ConstructL(const TRect& aRect); CTestContainer(); public: / New functions public: / Functions from base classes private: / Functions from base classes void SizeChanged(); TInt CountComponentControls() const; CCoeControl* ComponentControl(TInt aIndex) const; void Draw(const TRect& aRect) const; void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType); private: /data CEikLabel* iLabel; / example label CEikEdwin* iEdwin; ;#endif附上程序代码:TestContainer.rss源码#include TestContainer.h#include / for example label control#include / for CEikEdwin#include /for RFs RFile#include /for RFileReadStream、RFileWriteStream#include /for Unicodevoid CTestContainer:ConstructL(const TRect& aRect) CreateWindowL(); iLabel = new (ELeave) CEikLabel; iLabel-SetContainerWindowL( *this ); iLabel-SetTextL( _L(Example View) ); iEdwin = new (ELeave)CEikEdwin; iEdwin-SetContainerWindowL(*this); iEdwin-SetMopParent(this); iEdwin-ConstructL(10, 25, 160, 120); iEdwin-SetAknEditorFlags(EEikEdwinJustAutoCurEnd); iEdwin-SetBorder(TGulBorder:ESingleBlack);iEdwin -SetRect(TRect(10, 25, 160, 120); SetRect(aRect); ActivateL(); void CTestContainer:readFileToEdit() RFs fs; RFile file; User:LeaveIfError(fs.Connect(); CleanupClosePushL(fs);_LIT(newPath, c:Hello.txt);/打开文件,获取文件大小 User:LeaveIfError(file.Open(fs,newPath, EFileRead); CleanupClosePushL(file); TInt size;User:LeaveIfError(file.Size(size); /用一个8为的二进制流读取文件,并转化为16位的双字节UTF8编码 HBufC8* iBuffer=HBufC8:NewL(size);TPtr8 bufferPtr(iBuffer-Des(); User:LeaveIfError(file.Read(bufferPtr); CleanupStack:PopAndDestroy(2); /file StreamReadFromFile StreamData fs.Close(); HBufC16* aLineData;aLineData=CnvUtfConverter:ConvertToUnicodeFromUtf8L(iBuffer-Des();iEdwin -SetTextL(aLineData);iEdwin-SetFocus(ETrue);iLabel-SetTextL( _L(open file to edwin) );SizeChanged();delete iBuffer;delete aLineData; void CTestContainer:saveEditToFile() RFs fsSession; User:LeaveIfError(fsSession.Connect(); RFile file; _LIT(newPath, c:Hello.txt); TInt err = file.Open(fsSession,newPath,EFileWrite); if (err=KErrNotFound) err=file.Create(fsSession,newPath,EFileWrite); /创建写文件流,并定位到源文件末 RFile f=file; RFileWriteStream out(f); TInt iFileSize = 0; file.Size(iFileSize); out.Attach(file, iFileSize); /获得编辑框内容,并转化为8位数据流 HBufC16* iBuffer=HBufC16:NewL(100); iEdwin-GetText(iBuffer-Des(); HBufC8* aLineData; aLineData = CnvUtfConverter:ConvertFromUnicodeToUtf8L(iBuffer-Des(); /写入文件 out.WriteL(aLineData-Des(); out.CommitL(); out.Close(); fsSession.Close(); delete iBuffer; delete aLineData; iLabel-SetTextL( _L(save edwin to file) ); SizeChanged(); CTestContainer:CTestContainer() delete iLabel; delete iEdwin; void CTestContainer:SizeChanged() iLabel-SetExtent( TPoint(10,10), iLabel-MinimumSize() ); iEdwin-SetExtent( TPoint( 10, 25 ), iEdwin-MinimumSize() ); TInt CTestContainer:CountComponentControls() const return 2; / return nbr of controls inside this container CCoeControl* CTestContainer:ComponentControl(TInt aIndex) const switch ( aIndex ) case 0: return iLabel; case 1: return iEdwin; default: return NULL; void CTestContainer:Draw(const TRect& aRect) const CWindowGc& gc = SystemGc(); gc.SetPenStyle( CGraphicsContext:ENullPen ); g
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 航空物流成本与报价策略考核试卷
- 糖果的食品安全法规解读与应用考核试卷
- 造纸原料的全球供应链管理考核试卷
- 通信设备在高速公路紧急救援通信考核试卷
- 柑橘种植园农业生物多样性保护措施考核试卷
- 呼叫中心服务技巧提升考核试卷
- 烟草制品零售产品知识更新考核试卷
- 工商管理核心课程体系
- 国际有机婴儿奶粉进口与品牌联合推广协议
- 天然气输送管道日常巡检与隐患排查协议
- 山东师范大学《文献学专题》期末考试复习题及参考答案
- PPT失禁性皮炎护理(IAD)
- 超星尔雅学习通《经济与社会如何用决策思维洞察生活》章节测试答案
- 北师大版小学二年级数学上册课程纲要
- 职工休假请假条模板
- 心脏康复指南完整版
- 国开电大土木工程本科《工程地质》在线形考形考(作业1至4)试题及答案
- 售后维修服务单
- 国家中长期科技发展规划纲要2021-2035
- ZDY3200S型煤矿用全液压坑道钻机行业资料矿业工程
- 北师大版八年级数学下册 (一元一次不等式)一元一次不等式和一元一次不等式组课件(第2课时)
评论
0/150
提交评论