250 likes | 478 Views
Symbian 手机上的文件操作. 主要内容. Symbian 的文件系统 文件服务器 文件类 RFile 流. Symbian 的文件系统. Symbian 文件系统的特点 使用逻辑驱动器的概念 支持长文件名 Symbian 的全路径文件名, 类似于 Dos/Windows 系统的文件名 在文件、目录名称中,不能出现这些特殊字符: < 、 > 、”、 / 等. 文件服务器. 文件服务器器会话 文件服务器会话类 RFs 添加、删除、移动和重命名文件、目录。
E N D
主要内容 • Symbian的文件系统 • 文件服务器 • 文件类RFile • 流
Symbian的文件系统 • Symbian文件系统的特点 • 使用逻辑驱动器的概念 • 支持长文件名 • Symbian的全路径文件名, • 类似于Dos/Windows系统的文件名 • 在文件、目录名称中,不能出现这些特殊字符:<、>、”、/等
文件服务器 • 文件服务器器会话 • 文件服务器会话类RFs 添加、删除、移动和重命名文件、目录。 (2)查看和改变文件、目录的属性信息,这包括文件或目录最后被更改的日期、文件的大小以及只读、隐藏或存档标志等。 (3)列出指定目录下的子目录或文件。 (4)处理应用使用的文件系统的缺省目录。 (5)分析文件名称的属性和会话路径等。 (6)获取驱动器和卷的信息等。 (7)获取系统的驱动器列表。
文件服务器 • 文件服务器器会话 • 连接和关闭文件服务器会话 RFs fs; fs.Connect(); //连接文件服务器会话 ... ... //在文件服务器上会话上操作 fs.Delete(_L("c:\other\FileExam.log")); //删除指定的文件 ... ... fs.Close(); //关闭文件服务器会话
文件服务器 • 文件操作 • 文件改名 //文件改名 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);
文件服务器 • 文件操作 • 文件移动 //文件移动 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);
文件服务器 • 文件操作 • 删除文件 //删除文件 TFileName fnNew; fnNew.Copy(_L("c:\\Data\\Others\\dir2\\3.txt")); RFs& fs=CCoeEnv::Static()->FsSession(); fs.Delete(fnNew);
文件服务器 • 目录操作 • 创建单级目录 //创建单级目录 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);
文件服务器 • 目录操作 • 创建多级目录 //创建多级目录 TFileName fnPath; fnPath.Copy(_L("c:\\Data\\Others\\dir6\\dir61\\dir611\\")); RFs& fs=CCoeEnv::Static()->FsSession(); TInt n1=fs.MkDirAll(fnPath);
文件服务器 • 目录操作 • 删除目录 //删除目录 TFileName fnPath; fnPath.Copy(_L("c:\\Data\\Others\\dir6\\dir61\\dir611\\")); RFs& fs=CCoeEnv::Static()->FsSession(); fs.RmDir(fnPath);
文件服务器 • 目录操作 • 读取目录列表 //获得指定目录下子目录和文件列表 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;
文件服务器 • 文件名解析 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()));
文件类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);
文件类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对象处理已经打开的文件
文件类RFile • 创建、打开、关闭文件 • 打开文件 RFile file; User::LeaveIfError(file.Open(fs,fnDataFile,EFileRead | EFileWrite)); ... ... //使用file对象处理已经打开的文件 • 关闭文件 file.Close();
文件类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);
文件类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; ... ...
文件类RFile • 搜索 IMPORT_C TInt Seek(TSeek aMode,TInt& aPos) const; enum TSeek { ESeekAddress, //相对于基于ROM文件的绝对位置 ESeekStart, //相对于文件的开始位置 ESeekCurrent, //相对于文件的当前位置 ESeekEnd //相对于文件的末尾位置 };
流 • 流类型 • 流式文件 RFileWriteStream RFileReadStream • 描述符流 RDesWriteStream RDesReadStream • 内存流 RMemWriteStream RMemReadStream • 缓冲流 RBufWriteStream,RBufReadStream • 存储流 RStoreWriteStream,RStoreReadStream • 字典流 RDictionaryWriteStream,RDictionaryReadStream
流 • 外部化数据 • 创建流文件 //创建流式文件 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();
流 • 外部化数据 • 外部化数据 //外部化数据到文件中 TInt32 nID; TBuf16<20> bufName; nID=10; bufName.Append(_L("John")); fileWriteStream << nID; fileWriteStream << bufName;
流 • 外部化数据 • 关闭外部化流 fileWriteStream.CommitL(); fileWriteStream.Pop(); fileWriteStream.Release();
流 • 内部化数据 //打开流式文件 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();
流 • 可流化的数据类型 • OS内部基本数据类型 TInt8、TInt16、TInt32、TUint8、TUint16、TUint32 TBuf8、TBuf16、HBufC8、HBufC16等 • 用户定义的任意对象类 需要实现下面的两个方法 void ExternalizeL(RWriteStream& aStream) const; void InternalizeL(RReadStream& aStream);