RFile
概述
实现了创建打开一个文件,以及在单一文件上的所有操作,包括: 读写文件、在文件中定位、在文件中锁和解锁、设置文件属性。在使用上面功能时,必须连接一个文件服务器会话,并且文件处于打开状态。
打开文件的方式:
1、 使用Open() 成员函数打开一个已存在的文件,通过设置访问模式,可以对文件进行读或写操作;如果文件不存在将返回错误。
2、 使用Create() 成员函数创建并打开一个文件,对文件进行写操作,如果文件已存在将返回错误。
3、 使用Replace() 成员函数打开一个文件,对文件进行写操作;如果文件已存在将替换原文件,如果文件不存在将创建文件。
4、 使用Temp() 成员函数创建并打开一个临时文件,对文件进行读或写操作。
RFile 中定义多个重载的Read() 和Write() 函数,每个函数都用于不同的读写方式。
RFile API
1、Open()、Create()、Replace()、Temp()、Close()、Flush()
IMPORT_C TInt Open(RFs &aFs, const TDesC &aName, TUint aFileMode);
打开一个已存在的文件进行读或写操作。如果文件不存在将返回错误。aFs为已连接的文件服务器会话的引用;aFileMode为文件的打开模式(详细见TFileMode)。如果尝试打开一个"只读"属性的文件进行写操作,将返回错误。文件打开后,当前文件写位置缺省为文件开始处,可以通过Seek()设置不同的写位置。
IMPORT_C TInt Create(RFs &aFs, const TDesC &aName, TUint aFileMode);
创建并打开一个文件进行读操作,并自动设置文件的属性为存档。如果文件已存在或文件路径不存在将返回错误。
IMPORT_C TInt Replace(RFs &aFs, const TDesC &aName, TUint aFileMode);
打开一个文件进行写操作,并自动设置文件的属性为存档。如果文件已存在,则代替已存在文件的内容;如果文件不存在,则创建新文件。如果文件已存在或文件路径不存在将返回错误。
IMPORT_C TInt Temp(RFs &aFs, const TDesC &aPath, TFileName &aName,
TUint aFileMode);
创建一个唯一文件名的临时文件进行读或写。
IMPORT_C void Close();
关闭文件。任何文件将在文件服务器会话结束时自动关闭。
IMPORT_C TInt Flush();
提交数据到文件内。尽管Close() 也能够在关闭文件前自动调用Flush() 提交数据。但Close() 不能获得提交数据失败返回的错误信息。
2、Seek()
IMPORT_C TInt Seek(TSeek aMode, TInt &aPos) const;
设置文件的读写位置,也可以获得文件当前的读写位置。文件开始的读写位置为0 。aMode 指定了文件的查找的起点(文件开始位置ESeekStart 、文件结束位置ESeekEnd 、文件当然位置ESeekCurrent );aPos 指定了相对于查找起点位置的字节数偏移量,可以为负值。函数执行后aPos 将返回文件新的读写位置。
3、Size()、SetSize()
IMPORT_C TInt Size(TInt &aSize) const;
获得当前文件的字节大小。aSize 返回当然文件的字节大小。
IMPORT_C TInt SetSize(TInt aSize);
设置文件的字节大小。如果文件的大小减少了,那么数据将从文件结束位置处删除。设置文件大小后,文件当前的读写位置不会改变或改变为文件结束位置。必须在文件以写操作打开文件时使用该函数。
4、Att()、SetAtt()、Modified()、SetModified()、Set()
IMPORT_C TInt Att(TUint &aAttValue) const;
获得文件的属性。
IMPORT_C TInt SetAtt(TUint aSetAttMask, TUint aClearAttMask);
设置文件属性并同时清除文件其他属性。
IMPORT_C TInt Modified(TTime &aTime) const;
获得文件最后的修改时间。
IMPORT_C TInt SetModified(const TTime &aTime);
设置文件最后的修改时间。
IMPORT_C TInt Set(const TTime &aTime, TUint aSetAttMask,
TUint aClearAttMask);
同时设置文件的属性和最后修改时间。
5、Rename()
IMPORT_C TInt Rename(const TDesC &aNewName);
将打开的文件重命名为指定的文件名。如果指定的文件名与打开的文件名相同,但路径不同,则将打开的文件移动到指定的路径下。
6、Drive()
IMPORT_C TInt Drive(TInt &aDriveNumber, TDriveInfo &aDriveInfo) const;
获得文件所在的驱动器的信息。
Symbian OS 文件服务器(四) — 目录项
RDir
概述
读取目录下的目录项。在读取目录项前,必须使用目录项属性过滤参数打开目录项所在的目录,然后才能使用Read() 函数读取属性过滤后的目录项。操作完成后,应该使用Close() 函数关闭打开的目录。
有两种版本的Read() 方法:一种是每次只读取一个目录项,要求遍历所有目录项。另一种使用一个TEntryArray 类型,可以一次读取多个目录项。为了让应用程序逻辑简单,这种类型和服务器的交互少,并且非常高效。
每种版本的Read() 方法都能工作在同步或异步模式。
通常,RFs::GetDir() 要不RDir::Read() 更为便利。RFs::GetDir() 可以允许目录项以不同的方式进行排序。然而,它却不区分同步或异步模式,并且不允许逐个读取目录项。
RDir API
1、Open()、Close()
IMPORT_C TInt Open(RFs &aFs, const TDesC &aMatchName, TUint anAttMask);
打开一个使用了属性掩码过滤后的目录。在使用任何版本的Read() 函数前,必须先调用该函数。
IMPORT_C void Close();
关闭打开的目录项。
2、Read()
IMPORT_C TInt Read(TEntryArray &anArray) const;
读取过滤后所有的目录项到指定的目录项数组中。这是一个同步函数,操作完成后才返回。
IMPORT_C void Read(TEntryArray &anArray, TRequestStatus &aStatus) const;
读取过滤后所有的目录项到指定的目录项数组中。这是一个异步函数。
IMPORT_C TInt Read(TEntry &anEntry) const;
一次读取过滤后的一个目录项。这是一个同步函数。
IMPORT_C void Read(TPckg&anEntry,TRequestStatus &aStatus)const;
一次读取过滤后的一个目录项。这是一个异步函数。
CDir
概述
已经从文件系统中读取到内存的目录项数组。用户程序可以读取和排序目录项数组,但不能创建。
CDir API
1、RFs::GetDir()
获得目录项数组的CDir 指针。由于用户不能创建CDir 对象,所以CDir 没有公开的构造函数。
2、Count()、operator[]()、Sort()
IMPORT_C TInt Count() const;
获得目录项数组的长度。
IMPORT_C const TEntry &operator[](TInt anIndex) const;
通过数组下标获得指定的一个目录项。
IMPORT_C TInt Sort(TUint aEntrySortKey);
排序目录项。
TEntry
概述
包装了一个目录项,它可以是目录、文件或卷标。每个目录项都用一个与它所属的目录和类型相关的名称,类型通过一个唯一的UID 指定。
TEntry 包装了目录以下信息:
1、目录项的类型:iType
2、目录项的属性:iAtt
3、目录项的大小
4、目录项的最后修改时间
TEntry API
1、TEntry()
IMPORT_C TEntry();
默认构造函数。
IMPORT_C TEntry(const TEntry &aEntry);
拷贝构造函数。
2、operator=()、operator[]()
IMPORT_C TEntry &operator=(const TEntry &aEntry);
赋值操作符。
inline const TUid &operator[](TInt anIndex) const;
获得文件3 个UID 中的1 个。
3、IsReadOnly()、IsHidden()、IsSystem()、IsArchive()、IsDir()
IMPORT_C TBool IsReadOnly() const;
判断文件或目录属性是否为只读。
IMPORT_C TBool IsHidden() const;
判断文件或目录属性是否为隐藏。
IMPORT_C TBool IsSystem() const;
判断文件或目录属性是否为系统。
IMPORT_C TBool IsArchive() const;
判断文件属性是否为只读。
IMPORT_C TBool IsDir() const;
判断目录项是否为目录。
4、iAtt、iSize、iModified、iType、iName
TUint iAtt;
目录项属性,每一个二进制位描述了一个属性。
TInt iSize;
目录项大小。
TTime iModified;
目录项最后修改时间
TUidType iType;
文件UID 类型
TBufC< KMaxFileName > iName;
目录项名称。
Symbian OS 文件服务器(五) — 文件名分析器
TParse
概述
分析文件名。该类使用Symbian OS 支持的全路径文件名结构。首先,TParse 使用Set() 函数建立需要分析的文件名。然后,使用多个在基类TParseBase 中定义的获取函数,如:FullName()、Drive()、Path()、DriveAndPath()、Name()、Ext() 和NameAndExt() 来获得路径的各个组成部分。
TParse API
1、TParse
IMPORT_C TParse();
默认构造函数。
2、Set()、SetNoWild()
IMPORT_C TInt Set(const TDesC &aName,
const TDesC *aRelated,
const TDesC *aDefault);
指定需要分析的文件名,文件名中允许使用通配符。aRelated 和aDefault 默认为NULL 。
IMPORT_C TInt SetNoWild(const TDesC &aName,
const TDesC *aRelated,
const TDesC *aDefault);
指定需要分析的文件名,文件名中不允许使用通配符。aRelated 和aDefault 默认为NULL 。
3、FullName()、Drive()、Path()、DriveAndPath()、
Name()、Ext()、 NameAndExt()
IMPORT_C const TDesC &FullName() const;
获得全路径文件名:drive-letter: /path/filename.extension
IMPORT_C TPtrC Drive() const;
获得驱动器字符:drive-letter:
IMPORT_C TPtrC Path() const;
获得路径:/path/
IMPORT_C TPtrC DriveAndPath() const;
获得驱动器字符和路径:drive-letter:/path/
IMPORT_C TPtrC Name() const;
获得文件名称:filename
IMPORT_C TPtrC Ext() const;
获得文件扩展名:.extension
IMPORT_C TPtrC NameAndExt() const;
获得文件名称和扩展名:filename.extension
4、PopDir()、AddDir()
IMPORT_C TInt PopDir();
将全名文件名中最后一个目录从路径中删除。用于导航到上一级目录中。
IMPORT_C TInt AddDir(const TDesC &aName);
在全名文件名的最后一个目录和文件名(如果有文件名的话)之间插入指定的目录,插入目录的开始和结尾处不能包含"/"。
5、DrivePresent()、PathPresent()、NamePresent()、ExtPresent()、
NameOrExtPresent()
IMPORT_C TBool DrivePresent() const;
判断由TParse::Set()、TParse::SetNoWild() 或RFs::Parse()
的aName 参数指定的全路径的驱动器是否存在。
IMPORT_C TBool PathPresent() const;
判断由TParse::Set()、TParse::SetNoWild() 或RFs::Parse()
的aName 参数指定的全路径的路径是否存在。
IMPORT_C TBool NamePresent() const;
判断由TParse::Set()、TParse::SetNoWild() 或RFs::Parse()
的aName 参数指定的全路径的名称是否存在。
IMPORT_C TBool ExtPresent() const;
判断由TParse::Set()、TParse::SetNoWild() 或RFs::Parse()
的aName 参数指定的全路径的扩展名是否存在。
IMPORT_C TBool NameOrExtPresent() const;
判断由TParse::Set()、TParse::SetNoWild() 或RFs::Parse()
的aName 参数指定的全路径的文件名或扩展名是否存在。
6、IsRoot()、IsWild()、IsNameWild()、 IsExtWild()
IMPORT_C TBool IsRoot() const;
判断经过分析后的全路径是否为根目录。
IMPORT_C TBool IsWild() const;
判断经过分析后的全路径中的文件名或扩展名是否包含通配符。
IMPORT_C TBool IsNameWild() const;
判断经过分析后的全路径中的文件名是否包含通配符。
IMPORT_C TBool IsExtWild() const;
判断经过分析后的全路径中的扩展名是否包含通配符。