Top Banner
Symbian 手手手手手手手手
25

Symbian 手机上的文件操作

Jan 12, 2016

Download

Documents

Symbian 手机上的文件操作. 主要内容. Symbian 的文件系统 文件服务器 文件类 RFile 流. Symbian 的文件系统. Symbian 文件系统的特点 使用逻辑驱动器的概念 支持长文件名 Symbian 的全路径文件名, 类似于 Dos/Windows 系统的文件名 在文件、目录名称中,不能出现这些特殊字符: < 、 > 、”、 / 等. 文件服务器. 文件服务器器会话 文件服务器会话类 RFs 添加、删除、移动和重命名文件、目录。 - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Symbian 手机上的文件操作

Symbian手机上的文件操作

Page 2: Symbian 手机上的文件操作

主要内容Symbian 的文件系统文件服务器文件类 RFile流

Page 3: Symbian 手机上的文件操作

Symbian的文件系统Symbian 文件系统的特点

使用逻辑驱动器的概念 支持长文件名 Symbian 的全路径文件名,

类似于 Dos/Windows 系统的文件名 在文件、目录名称中,不能出现这些特殊字符: < 、 > 、”、 / 等

Page 4: Symbian 手机上的文件操作

文件服务器文件服务器器会话

文件服务器会话类 RFs

添加、删除、移动和重命名文件、目录。( 2 )查看和改变文件、目录的属性信息,这包括文件或目录最后被更改的日期、文件的大小以及只读、隐藏或存档标志等。

( 3 )列出指定目录下的子目录或文件。( 4 )处理应用使用的文件系统的缺省目录。( 5 )分析文件名称的属性和会话路径等。( 6 )获取驱动器和卷的信息等。( 7 )获取系统的驱动器列表。

Page 5: Symbian 手机上的文件操作

文件服务器文件服务器器会话

连接和关闭文件服务器会话 RFs fs;

fs.Connect(); // 连接文件服务器会话... ... // 在文件服务器上会话上操作

fs.Delete(_L("c:\other\FileExam.log")); // 删除指定的文件

... ...

fs.Close(); // 关闭文件服务器会话

Page 6: Symbian 手机上的文件操作

文件服务器文件操作

文件改名 // 文件改名TFileName fnNew;

TFileName fnOld;

fnOld.Copy(_L("c:\\Data\\Others\\dir1\\1.txt"));

fnNew.Copy(_L("c:\\Data\\Others\\dir1\\2.txt"));

RFs& fs=CCoeEnv::Static()->FsSession();

fs.Rename(fnOld,fnNew);

Page 7: Symbian 手机上的文件操作

文件服务器文件操作

文件移动 // 文件移动TFileName fnNew;

TFileName fnOld;

fnOld.Copy(_L("c:\\Data\\Others\\dir1\\3.txt"));

fnNew.Copy(_L("c:\\Data\\Others\\dir2\\3.txt"));

RFs& fs=CCoeEnv::Static()->FsSession();

fs.Rename(fnOld,fnNew);

Page 8: Symbian 手机上的文件操作

文件服务器文件操作

删除文件 // 删除文件TFileName fnNew;

fnNew.Copy(_L("c:\\Data\\Others\\dir2\\3.txt"));

RFs& fs=CCoeEnv::Static()->FsSession();

fs.Delete(fnNew);

Page 9: Symbian 手机上的文件操作

文件服务器目录操作

创建单级目录 // 创建单级目录TFileName fnPath,fnPath2;

fnPath.Copy(_L("c:\\Data\\Others\\dir5\\"));

fnPath2.Copy(_L("c:\\Data\\Others\\dir5\\dir511\\"));

RFs& fs=CCoeEnv::Static()->FsSession();

TInt n1=fs.MkDir(fnPath);

TInt n2=fs.MkDir(fnPath2);

Page 10: Symbian 手机上的文件操作

文件服务器目录操作

创建多级目录 // 创建多级目录TFileName fnPath;

fnPath.Copy(_L("c:\\Data\\Others\\dir6\\dir61\\dir611\\"));

RFs& fs=CCoeEnv::Static()->FsSession();

TInt n1=fs.MkDirAll(fnPath);

Page 11: Symbian 手机上的文件操作

文件服务器目录操作

删除目录 // 删除目录TFileName fnPath;

fnPath.Copy(_L("c:\\Data\\Others\\dir6\\dir61\\dir611\\"));

RFs& fs=CCoeEnv::Static()->FsSession();

fs.RmDir(fnPath);

Page 12: Symbian 手机上的文件操作

文件服务器目录操作

读取目录列表 // 获得指定目录下子目录和文件列表TFileName fnPath;fnPath.Copy(_L("c:\\Data\\"));RFs& fs=CCoeEnv::Static()->FsSession();CDir* pDir=NULL;TInt nn=fs.GetDir(fnPath,KEntryAttNormal|KEntryAtt

MatchMask,ESortByDate,pDir);

for(int i=0;i<pDir->Count();i++){RDebug::Print(_L("%S\n"),&((*pDir)[i].iName));}

delete pDir;

Page 13: Symbian 手机上的文件操作

文件服务器文件名解析

TFileName fnNew;

fnNew.Copy(_L("c:\\Data\\Others\\demo.txt"));

TParse fp;

RFs& fs=CCoeEnv::Static()->FsSession();

fs.Parse(fnNew,fp);

RDebug::Print(_L("Driver: %S\n"),&(fp.Drive()));

RDebug::Print(_L("Path: %S\n"),&(fp.Path()));

RDebug::Print(_L("FileName: %S\n"),&(fp.Name()));

RDebug::Print(_L("FileExt: %S\n"),&(fp.Ext()));

Page 14: Symbian 手机上的文件操作

文件类 RFile

创建、打开、关闭文件 IMPORT_C TInt Open(RFs& aFs,const TDesC& a

Name,TUint aFileMode);

IMPORT_C void Close();

IMPORT_C TInt Create(RFs& aFs,const TDesC& aName,TUint aFileMode);

IMPORT_C TInt Replace(RFs& aFs,const TDesC& aName,TUint aFileMode);

Page 15: Symbian 手机上的文件操作

文件类 RFile

创建、打开、关闭文件 创建文件

TFileName fnDataFile;

fnDataFile.Copy(_L("c:\\Data\\FileExam.dat"));

RFs& fs=CCoeEnv::Static()->FsSession();

RFile file;

User::LeaveIfError(file.Create(fs,fnDataFile,EFileWrite));

... ... // 使用 file 对象处理已经打开的文件// 或者使用下面的方式创建文件User::LeaveIfError(file.Replace(fs,fnDataFile,EFileWrit

e));

... ... // 使用 file 对象处理已经打开的文件

Page 16: Symbian 手机上的文件操作

文件类 RFile

创建、打开、关闭文件 打开文件

RFile file;

User::LeaveIfError(file.Open(fs,fnDataFile,EFileRead | EFileWrite));

... ... // 使用 file 对象处理已经打开的文件 关闭文件

file.Close();

Page 17: Symbian 手机上的文件操作

文件类 RFile

写入数据 IMPORT_C TInt Write(const TDesC8& aDes);

IMPORT_C void Write(const TDesC8& aDes,TRequestStatus& aStatus);

IMPORT_C TInt Write(const TDesC8& aDes,TInt aLength);

IMPORT_C void Write(const TDesC8& aDes,TInt aLength,TRequestStatus& aStatus);

Page 18: Symbian 手机上的文件操作

文件类 RFile

读取数据 IMPORT_C TInt Read(TDes8& aDes) const;IMPORT_C void Read(TDes8& aDes,TRequestSt

atus& aStatus) const;IMPORT_C TInt Read(TDes8& aDes,TInt aLengt

h) const;IMPORT_C void Read(TDes8& aDes,TInt aLengt

h,TRequestStatus& aStatus) const;IMPORT_C TInt Read(TInt aPos,TDes8& aDes) c

onst;IMPORT_C void Read(TInt aPos,TDes8& aDes,T

RequestStatus& aStatus) const;... ...

Page 19: Symbian 手机上的文件操作

文件类 RFile

搜索 IMPORT_C TInt Seek(TSeek aMode,TInt& aPos)

const;

enum TSeek{ESeekAddress, // 相对于基于 ROM 文件的绝对位置ESeekStart, // 相对于文件的开始位置ESeekCurrent, // 相对于文件的当前位置ESeekEnd // 相对于文件的末尾位置};

Page 20: Symbian 手机上的文件操作

流流类型

流式文件 RFileWriteStream RFileReadStream

描述符流 RDesWriteStream RDesReadStream

内存流 RMemWriteStream RMemReadStream

缓冲流RBufWriteStream,RBufReadStream

存储流RStoreWriteStream,RStoreReadStream

字典流RDictionaryWriteStream,RDictionaryReadStream

Page 21: Symbian 手机上的文件操作

流外部化数据

创建流文件// 创建流式文件TFileName fnDataFile;

fnDataFile.Copy(_L("c:\\Data\\StreamExam.dat"));

RFs& fs=CCoeEnv::Static()->FsSession();

RFileWriteStream fileWriteStream;

User::LeaveIfError(fileWriteStream.Create(fs,fnDataFile,EFileWrite));

// User::LeaveIfError(fileWriteStream.Replace(fs,fnDataFile,EFileWrite));

fileWriteStream.PushL();

Page 22: Symbian 手机上的文件操作

流外部化数据

外部化数据// 外部化数据到文件中TInt32 nID;

TBuf16<20> bufName;

nID=10;

bufName.Append(_L("John"));

fileWriteStream << nID;

fileWriteStream << bufName;

Page 23: Symbian 手机上的文件操作

流外部化数据

关闭外部化流fileWriteStream.CommitL();

fileWriteStream.Pop();

fileWriteStream.Release();

Page 24: Symbian 手机上的文件操作

流 内部化数据

// 打开流式文件TFileName fnDataFile;fnDataFile.Copy(_L("c:\\Data\\StreamExam.dat"));RFs& fs=CCoeEnv::Static()->FsSession();RFileReadStream fileReadStream;User::LeaveIfError(fileReadStream.Open(fs,fnDataFile,EFileRead));fileReadStream.PushL();// 从文件中内部化数据TInt32 nID;TBuf16<20> bufName;fileReadStream >> nID;fileReadStream >> bufName;RDebug::Print(_L("ID=%d Name=%S"),nID,&bufName);// 释放资源fileReadStream.Pop();fileReadStream.Release();

Page 25: Symbian 手机上的文件操作

流可流化的数据类型

OS 内部基本数据类型 TInt8 、 TInt16 、 TInt32 、 TUint8 、 TUint16 、 TU

int32

TBuf8 、 TBuf16 、 HBufC8 、 HBufC16 等 用户定义的任意对象类

需要实现下面的两个方法void ExternalizeL(RWriteStream& aStream) c

onst;

void InternalizeL(RReadStream& aStream);