vc Symbian开发23Word格式文档下载.docx
《vc Symbian开发23Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《vc Symbian开发23Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。
aStream);
voidExternalizeL(RWriteStream&
aStream)const;
//外化
voidInternalizeL(RReadStream&
voidDisplay();
CStudent();
//无参构造函数
private:
CStudent(TInt32aNo,TInt32aScore);
voidConstructL(TDesC&
aName);
HBufC*iName;
TInt32iNo;
//明确指明Int类型的位数
TInt32iScore;
};
CStudent*CStudent:
:
NewLC(TDesC&
aName,TInt32aNo,TInt32aScore)
CStudent*self=new(ELeave)CStudent(aNo,aScore);
//构造CStudent指针对象
CleanupStack:
PushL(self);
//压入指针栈
self->
ConstructL(aName);
//赋值描述符,可能引起异常
Pop(self);
//弹出指针栈
returnself;
}
CStudent:
CStudent(){}
CStudent(TInt32aNo,TInt32aScore)
iNo=aNo;
//学号
iScore=aScore;
//分数
voidCStudent:
ConstructL(TDesC&
aName)
iName=aName.AllocL();
//注意这里的赋值方法
~CStudent()//析构函数
deleteiName;
iName=NULL;
ExternalizeL(RWriteStream&
aStream)const
aStream.WriteInt32L(iName->
Des().MaxLength());
//写入iName的最大长度
aStream<
<
*iName;
//写入姓名
aStream.WriteInt32L(iNo);
//写入学号
aStream.WriteInt32L(iScore);
//写入分数
InternalizeL(RReadStream&
aStream)
if(iName!
=NULL)//如果iName不为空
//释放iName资源(内存)
}
TInt32max;
max=aStream.ReadInt32L();
//读取iName的最大长度
iName=HBufC:
NewL(aStream,max);
//读取iName的名字
iNo=aStream.ReadInt32L();
//读取学号
iScore=aStream.ReadInt32L();
//读取分数
NewLC(RReadStream&
CStudent*self=new(ELeave)CStudent;
InternalizeL(aStream);
//进行内化
Display()
_LIT(KNo,"
No=%d\n"
);
_LIT(KScore,"
score=%d\n"
_LIT(KNewLine,"
\n"
console->
Printf(*iName);
Printf(KNewLine);
Printf(KNo,iNo);
Printf(KScore,iScore);
Printf(_L("
pressanykeytocontiune\n"
));
Getch();
classCTeacher:
//构造CTeacher指针对象(名字,学号,年龄)
staticCTeacher*NewLC(TDesC&
aName,TInt32aNo,TInt32aAge);
~CTeacher();
//构造函数,用于读取文件
staticCTeacher*NewLC(RReadStream&
CTeacher();
CTeacher(TInt32aNo,TInt32aAge);
TInt32iAge;
CTeacher*CTeacher:
aName,TInt32aNo,TInt32aAge)
CTeacher*self=new(ELeave)CTeacher(aNo,aAge);
CTeacher:
CTeacher(TInt32aNo,TInt32aAge)
iAge=aAge;
CTeacher(){};
voidCTeacher:
~CTeacher()
//写入名称长度
//写入编号
aStream.WriteInt32L(iAge);
//写入年龄
=NULL)
//读取名字长度
//根据长度,读取名称
//读取编号
iAge=aStream.ReadInt32L();
//读取年龄
CTeacher*self=new(ELeave)CTeacher;
_LIT(KAge,"
Age=%d\n"
Printf(KAge,iAge);
pressanykeytocontinue\n"
voidTSStoreL(RFsaFs,TDesC&
aFileName)
_LIT(KName1,"
gyb"
_LIT(KName2,"
lwm"
_LIT(KName3,"
ds"
_LIT(KName4,"
wxf"
TBuf<
10>
Name1(KName1);
Name2(KName2);
Name3(KName3);
Name4(KName4);
CStudent*stu1=CStudent:
NewLC(Name1,1,60);
CStudent*stu2=CStudent:
NewLC(Name2,2,80);
CTeacher*teacher1=CTeacher:
NewLC(Name3,1,23);
CTeacher*teacher2=CTeacher:
NewLC(Name4,2,24);
CArrayFixFlat<
CStudent>
*array1=new(ELeave)CArrayFixFlat<
(4);
CTeacher>
*array2=new(ELeave)CArrayFixFlat<
array1->
AppendL(*stu1);
AppendL(*stu2);
array2->
AppendL(*teacher1);
AppendL(*teacher2);
//建立直接文件存储
CFileStore*store=CDirectFileStore:
ReplaceLC(aFs,aFileName,EFileWrite);
store->
SetTypeL(TUidType(store->
Layout()));
//设置存储类型
CStreamDictionary*dictionary=CStreamDictionary:
NewLC();
//建立流字典写入学生写入学生数据
RStoreWriteStreamStuStream;
//写入流
TStreamIdSid=StuStream.CreateLC(*store);
//创建store下的写入流
TInt32numberOfStudents=array1->
Count();
StuStream<
numberOfStudents;
for(TInti=0;
i<
i++)
(*array1)[i].ExternalizeL(StuStream);
StuStream.CommitL();
PopAndDestroy();
//写入教师数据
RStoreWriteStreamTeacherStream;
//写入流
TStreamIdTid=TeacherStream.CreateLC(*store);
TInt32numberOfTeachers=array2->
TeacherStream<
numberOfTeachers;
for(i=0;
(*array2)[i].ExternalizeL(TeacherStream);
TeacherStream.CommitL();
//在流字典中建立流与Uid的映射
dictionary->
AssignL(TUid:
Uid(KStuDataStreamId),Sid);
Uid(KTeachDataStreamId),Tid);
RStoreWriteStreamroot;
//根流
TStreamIdrootid=root.CreateLC(*store);
//创建根流
root<
*dictionary;
root.CommitL();
SetRootL(rootid);
//设置根流
CommitL();
voidTSRestoreL(RFsaFs,TDesC&
(10);
PushL(array1);
PushL(array2);
//打开文件存储
OpenLC(aFs,aFileName,EFileRead);
//创建流字典
RStoreReadStreamrootStream;
rootStream.OpenLC(*store,store->
Root());
//打开根流
rootStream>
>
//读出流字典
TStreamIdSid=dictionary->
At(TUid:
Uid(KStuDataStreamId));
TStreamIdTid=dictionary->
Uid(KTeachDataStreamId));
//读出学生数据
RStoreReadStreamreadStuStream;
readStuStream.OpenLC(*store,Sid);
TInt32numberOfStudents;
readStuStream>
CStudent*stu=CStudent:
NewLC(readStuStream);
PushL(stu);
AppendL(*stu);
Pop(stu);
_LIT(KPrompt1,"
Liststudents:
Printf(KPrompt1);
(*array1)[i].Display();
//读出教师数据
RStoreReadStreamreadTeacherStream;
readTeacherStream.OpenLC(*store,Tid);
TInt32numberOfTeachers;
readTeacherStream>
CTeacher*teacher=CTeacher:
NewLC(readTeacherStream);
PushL(teacher);
AppendL(*teacher);
Pop(teacher);
_LIT(KPrompt2,"
Listteachers:
Printf(KPrompt2);
(*array2)[i].Display();
PopAndDestroy(store);
PopAndDestroy
(2);
voiddoExampleL()
RFsiFs;
User:
LeaveIfError(iFs.Connect());
_LIT(KFileName,"
c:
\\stuList1.txt"
20>
FileName(KFileName);
TSStoreL(iFs,FileName);
TSRestoreL(iFs,FileName);
iFs.Close();
运行效果
在之后的学习中,我们将继续介绍有关文件读写方面的知识,大家可以先运行这个例子体会一下