- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
学习Symbian第七课
学习Symbian第七课
今天,我们来做一个小程序,是关于文本文件的读取与写入的,文本文件是最基本的操作。先看看程序运行的效果吧
首先,给程序添加两个菜单用于打开和保存文件。当你选打开文件菜单时,程序读入“C:\Hello.txt”文件(这里的C盘不是电脑的C盘,而是手机模拟器的C盘),并显示在编辑框中。接着你可以在编辑框中对文本内容进行修改。改完后选择保存菜单,程序就把编辑框中的内容追加到原来的文件中保存下来。最后你可以再次选择打开菜单,这是你会发现第二次读入的文件和第一次读入的不同了,在文件后面多了上次编辑的内容。
程序涉及到的知识点
关于菜单和编辑框的操作是前几课讲的内容,我就不重复了。
文件和文件流的操作。
文件的操作要用到“f32file.h”头文件和“efsrv.lib”链接库,他提供了文件的创建删除复制等常规操作,能读取文件属性,读取文件内容等。
因为要保存文件,所以要用到文件流的操作,这就要用到“s32file.h”头文件和“estor.lib”链接库。
Unicode—8编码
我们在读取写入文件时,使用的是二进制来操作,文件中也是以8位的byte二进制数据来存储文件的,一个8位的byte最多能存储256个不同的信息,这样如果存储英文,那也是绰绰有余了。但是汉字远不止256个啊,要存储汉字信息,这就要用双字节来存储,也就是说用两个字节共同来表示一个汉字,这就是Unicode编码。
还有,手机程序中的编辑框所能接受的字符编码是Unicode编码,而文件流中的编码是单字节的字节流,这样在读取文件到编辑框中显示是需要转码的,从编辑框中保存到文件的过程也是要转码的。关于汉字的编码我还是能说上个一二来,我曾有一篇文章《让Flash能读会写》就发表在软件报上面。
在塞班程序中是不需要手动转码的,因为“utf.h”这个头文件里提供了转码的API,我们只要拿过来用就可以了。
程序制作过程:
新建一个多页面框架模版程序Test。
用记事本手动新建一个文本文件,输入“这是第一个Symbian程序!”并保存
C:\Symbian\8.0a\S60_2nd_FP2_SC\epoc32\wins\c\Hello.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 coecntrl.h
class CEikLabel; // for example labels
class 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);
pri
文档评论(0)