1 / 25

Symbian 手机上的文件操作

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

nicola
Download Presentation

Symbian 手机上的文件操作

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Symbian手机上的文件操作

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

  3. Symbian的文件系统 • Symbian文件系统的特点 • 使用逻辑驱动器的概念 • 支持长文件名 • Symbian的全路径文件名, • 类似于Dos/Windows系统的文件名 • 在文件、目录名称中,不能出现这些特殊字符:<、>、”、/等

  4. 文件服务器 • 文件服务器器会话 • 文件服务器会话类RFs 添加、删除、移动和重命名文件、目录。 (2)查看和改变文件、目录的属性信息,这包括文件或目录最后被更改的日期、文件的大小以及只读、隐藏或存档标志等。 (3)列出指定目录下的子目录或文件。 (4)处理应用使用的文件系统的缺省目录。 (5)分析文件名称的属性和会话路径等。 (6)获取驱动器和卷的信息等。 (7)获取系统的驱动器列表。

  5. 文件服务器 • 文件服务器器会话 • 连接和关闭文件服务器会话 RFs fs; fs.Connect(); //连接文件服务器会话 ... ... //在文件服务器上会话上操作 fs.Delete(_L("c:\other\FileExam.log")); //删除指定的文件 ... ... fs.Close(); //关闭文件服务器会话

  6. 文件服务器 • 文件操作 • 文件改名 //文件改名 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);

  7. 文件服务器 • 文件操作 • 文件移动 //文件移动 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);

  8. 文件服务器 • 文件操作 • 删除文件 //删除文件 TFileName fnNew; fnNew.Copy(_L("c:\\Data\\Others\\dir2\\3.txt")); RFs& fs=CCoeEnv::Static()->FsSession(); fs.Delete(fnNew);

  9. 文件服务器 • 目录操作 • 创建单级目录 //创建单级目录 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);

  10. 文件服务器 • 目录操作 • 创建多级目录 //创建多级目录 TFileName fnPath; fnPath.Copy(_L("c:\\Data\\Others\\dir6\\dir61\\dir611\\")); RFs& fs=CCoeEnv::Static()->FsSession(); TInt n1=fs.MkDirAll(fnPath);

  11. 文件服务器 • 目录操作 • 删除目录 //删除目录 TFileName fnPath; fnPath.Copy(_L("c:\\Data\\Others\\dir6\\dir61\\dir611\\")); RFs& fs=CCoeEnv::Static()->FsSession(); fs.RmDir(fnPath);

  12. 文件服务器 • 目录操作 • 读取目录列表 //获得指定目录下子目录和文件列表 TFileName fnPath; fnPath.Copy(_L("c:\\Data\\")); RFs& fs=CCoeEnv::Static()->FsSession(); CDir* pDir=NULL; TInt nn=fs.GetDir(fnPath,KEntryAttNormal|KEntryAttMatchMask, ESortByDate,pDir); for(int i=0;i<pDir->Count();i++) { RDebug::Print(_L("%S\n"),&((*pDir)[i].iName)); } delete pDir;

  13. 文件服务器 • 文件名解析 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()));

  14. 文件类RFile • 创建、打开、关闭文件 IMPORT_C TInt Open(RFs& aFs,const TDesC& aName,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);

  15. 文件类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,EFileWrite)); ... ... //使用file对象处理已经打开的文件

  16. 文件类RFile • 创建、打开、关闭文件 • 打开文件 RFile file; User::LeaveIfError(file.Open(fs,fnDataFile,EFileRead | EFileWrite)); ... ... //使用file对象处理已经打开的文件 • 关闭文件 file.Close();

  17. 文件类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);

  18. 文件类RFile • 读取数据 IMPORT_C TInt Read(TDes8& aDes) const; IMPORT_C void Read(TDes8& aDes,TRequestStatus& aStatus) const; IMPORT_C TInt Read(TDes8& aDes,TInt aLength) const; IMPORT_C void Read(TDes8& aDes,TInt aLength,TRequestStatus& aStatus) const; IMPORT_C TInt Read(TInt aPos,TDes8& aDes) const; IMPORT_C void Read(TInt aPos,TDes8& aDes,TRequestStatus& aStatus) const; ... ...

  19. 文件类RFile • 搜索 IMPORT_C TInt Seek(TSeek aMode,TInt& aPos) const; enum TSeek { ESeekAddress, //相对于基于ROM文件的绝对位置 ESeekStart, //相对于文件的开始位置 ESeekCurrent, //相对于文件的当前位置 ESeekEnd //相对于文件的末尾位置 };

  20. • 流类型 • 流式文件 RFileWriteStream RFileReadStream • 描述符流 RDesWriteStream RDesReadStream • 内存流 RMemWriteStream RMemReadStream • 缓冲流 RBufWriteStream,RBufReadStream • 存储流 RStoreWriteStream,RStoreReadStream • 字典流 RDictionaryWriteStream,RDictionaryReadStream

  21. • 外部化数据 • 创建流文件 //创建流式文件 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();

  22. • 外部化数据 • 外部化数据 //外部化数据到文件中 TInt32 nID; TBuf16<20> bufName; nID=10; bufName.Append(_L("John")); fileWriteStream << nID; fileWriteStream << bufName;

  23. • 外部化数据 • 关闭外部化流 fileWriteStream.CommitL(); fileWriteStream.Pop(); fileWriteStream.Release();

  24. • 内部化数据 //打开流式文件 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();

  25. • 可流化的数据类型 • OS内部基本数据类型 TInt8、TInt16、TInt32、TUint8、TUint16、TUint32 TBuf8、TBuf16、HBufC8、HBufC16等 • 用户定义的任意对象类 需要实现下面的两个方法 void ExternalizeL(RWriteStream& aStream) const; void InternalizeL(RReadStream& aStream);

More Related