RDir
概述
读取目录下的目录项。在读取目录项前,必须使用目录项属性过滤参数打开目录项所在的目录,然后才能使用Read()函数读取属性过滤后的目录项。操作完成后,应该使用Close()函数关闭打开的目录。
有两种版本的Read()方法:一种是每次只读取一个目录项,要求遍历所有目录项。另一种使用一个TEntryArray类型,可以一次读取多个目录项。为了让应用程序逻辑简单,这种类型和服务器的交互少,并且非常高效。
每种版本的Read()方法都能工作在同步或异步模式。
通常,RFs::GetDir()要不RDir::Read()更为便利。RFs::GetDir()可以允许目录项以不同的方式进行排序。然而,它却不区分同步或异步模式,并且不允许逐个读取目录项。
RDirAPI
1、Open()、Close()
IMPORT_CTInt Open(RFs &aFs, const TDesC&aMatchName, TUint anAttMask);
打开一个使用了属性掩码过滤后的目录。在使用任何版本的Read()函数前,必须先调用该函数。
IMPORT_Cvoid Close();
关闭打开的目录项。
2、Read()
IMPORT_C TIntRead(TEntryArray &anArray)const;
读取过滤后所有的目录项到指定的目录项数组中。这是一个同步函数,操作完成后才返回。
IMPORT_C voidRead(TEntryArray &anArray, TRequestStatus&aStatus) const;
读取过滤后所有的目录项到指定的目录项数组中。这是一个异步函数。
IMPORT_C TIntRead(TEntry &anEntry) const;
一次读取过滤后的一个目录项。这是一个同步函数。
IMPORT_C voidRead(TPckg&anEntry,TRequestStatus&aStatus)const;
一次读取过滤后的一个目录项。这是一个异步函数。
CDir
概述
已经从文件系统中读取到内存的目录项数组。用户程序可以读取和排序目录项数组,但不能创建。
CDirAPI
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(TUintaEntrySortKey);
排序目录项。
TEntry
概述
包装了一个目录项,它可以是目录、文件或卷标。每个目录项都用一个与它所属的目录和类型相关的名称,类型通过一个唯一的UID指定。
TEntry包装了目录以下信息:
1、目录项的类型:iType
2、目录项的属性:iAtt
3、目录项的大小
4、目录项的最后修改时间
TEntry API
1、TEntry()
IMPORT_CTEntry();
默认构造函数。
IMPORT_C TEntry(constTEntry &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 TBoolIsReadOnly() const;
判断文件或目录属性是否为只读。
IMPORT_C TBoolIsHidden() const;
判断文件或目录属性是否为隐藏。
IMPORT_C TBoolIsSystem() const;
判断文件或目录属性是否为系统。
IMPORT_C TBoolIsArchive() const;
判断文件属性是否为只读。
IMPORT_C TBool IsDir()const;
判断目录项是否为目录。
4、iAtt、iSize、iModified、iType、iName
TUintiAtt;
目录项属性,每一个二进制位描述了一个属性。
TIntiSize;
目录项大小。
TTimeiModified;
目录项最后修改时间
TUidTypeiType;
文件UID类型
TBufC<KMaxFileName > iName;
目录项名称。