Symbian手机上的文件操作
主要内容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|KEntryAtt
MatchMask,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& 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);
文件类 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 对象处理已经打开的文件
文件类 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,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;... ...
文件类 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 、 TU
int32
TBuf8 、 TBuf16 、 HBufC8 、 HBufC16 等 用户定义的任意对象类
需要实现下面的两个方法void ExternalizeL(RWriteStream& aStream) c
onst;
void InternalizeL(RReadStream& aStream);