Symbian 手机上的文件操作

25
Symbian 手手手手手手手手

description

Symbian 手机上的文件操作. 主要内容. Symbian 的文件系统 文件服务器 文件类 RFile 流. Symbian 的文件系统. Symbian 文件系统的特点 使用逻辑驱动器的概念 支持长文件名 Symbian 的全路径文件名, 类似于 Dos/Windows 系统的文件名 在文件、目录名称中,不能出现这些特殊字符: < 、 > 、”、 / 等. 文件服务器. 文件服务器器会话 文件服务器会话类 RFs 添加、删除、移动和重命名文件、目录。 - PowerPoint PPT Presentation

Transcript of Symbian 手机上的文件操作

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);