wxDir
wxDir
wxDir类是一个相当于 Unix 平台中 opendir/readdir/closedir 命令的功能的类, 可以枚举一个目录下的文件。也允许枚举整个目录。
wxDir 同样也提供了一个灵活的方式来枚举文件, 通过递归方式调用 函数或者使用更加简单的 函数。
使用示例:
1 wxDir dir(wxGetCwd()); 2 3 if ( !dir.IsOpened() ) 4 { 5 // 在这里处理错误 - wxDir 会输出一个错误消息来解释失败的具体原因 6 return; 7 } 8 9 puts("枚举当前目录下的文件:");10 11 wxString filename;12 13 bool cont = dir.GetFirst(&filename, filespec, flags);14 // filespec: 文件通配符, 例: _T("*.c"), flags: 枚举类型标志15 16 while ( cont )17 {18 printf("%s\n", filename.c_str());19 20 cont = dir.GetNext(&filename);21 }
派生于
无父类
常量
这些标识符规定了在通过 GetFirst/GetNext 枚举文件时什么样的文件类型将被枚举。
enum{ wxDIR_FILES = 0x0001, // 包含文件 wxDIR_DIRS = 0x0002, // 包含目录 wxDIR_HIDDEN = 0x0004, // 包含隐藏文件 wxDIR_DOTDOT = 0x0008, // 包含 '.' 和 '..' // 默认情况下, 将枚举除 '.' 和 '..' 以外的任何内容 wxDIR_DEFAULT = wxDIR_FILES | wxDIR_DIRS | wxDIR_HIDDEN}
所在头文件
<wx/dir.h>
成员
wxDir::wxDir
wxDir()
默认构造函数。
wxDir(const & dir)
为枚举打开目录, 使用 来检测错误。
wxDir::~wxDir
~wxDir()
wxDir的析构函数, 用于清理所占用的相关资源。 这不是一个虚函数, 所以意味着这个类并不能以多态方式使用。
wxDir::Exists
static bool Exists(const & dir)
检测目录是否存在。
wxDir::GetAllFiles
static size_t GetAllFiles(const & dirname, *files, const & filespec = wxEmptyString, int flags = wxDIR_DEFAULT)
该函数将会把位于 dirname 目录下的所有文件的完整路径添加到数组 files 中(注意: 数组中旧的内容将会被保存). 只有符合文件通配符 filespec 的才会被添加, 使用空的通配符将匹配所有文件。
在 flags 参数中必须包含 wxDIR_FILES 标志, 否则数组中的值将不会被改变, 同样还应该包含 wxDIR_DIRS 标识符, 以便通过递归进入到子目录中 (这两个标识符在默认值中已被包含)。
参见:
wxDir::FindFirst
static FindFirst(const & dirname, const & filespec, int flags = wxDIR_DEFAULT)
该函数将返回第一个符合文件通配符 filespec 的文件路径, 否则返回一个空的字符串表示没有文件得到匹配。
参数 flags 对于 wxDIR_FILES 标识符的包含可以忽略, 不会影响到该函数的行为。 在默认情况下, flags 参数将包含 wxDIR_DIRS 标识符, 以便进入到子目录进行匹配, 但是这不是必须的, 在不含该标识符的情况下函数仅在 dirname 目录中进行匹配。
参见:
wxDir::GetFirst
bool GetFirst(* filename, const & filespec = wxEmptyString, int flags = wxDIR_DEFAULT) const
开始枚举所有符合 filespec (如果为空, 则枚举所有文件) 并且符合 flags 的文件, 返回 true 时表示成功。
wxDir::GetName
GetName() const
返回自身完整的目录名称, 结尾处不包含路径分隔符 (斜杠 或 反斜杠)。
wxDir::GetNext
bool GetNext(* filename) const
按照最后一次调用 时的匹配规则继续枚举文件。
wxDir::GetTotalSize
static wxULongLong GetTotalSize(const & dir, * filesSkipped = NULL)
通过递归方式获得 dir 目录下所有文件的总大小并返回(以字节为单位), 当遇到错误时返回 wxInvalidSize 标志。
当递归遍历时遇到文件大小不可读的情况, 该文件将被添加到 filesSkipped 数组中, , 并且跳过。 这通常发生在一些特殊的文件夹下, 如被系统或其他进程锁定。 当 filesSkipped->GetCount() 不为零时说明所返回的值不是100%的准确和, 如果跳过的文件比较大, 就会造成得到的结果和实际大小相差较大。
参见: ,
wxDir::HasFiles
bool HasFiles(const & filespec = wxEmptyString)
判断目录中是否含有文件, 当目录中包含任何符合通配符 filespec 的文件时返回 true。如果 filespec 为空, 查找所有类型的文件。隐藏文件也在查找的范围内。
wxDir::HasSubDirs
bool HasSubDirs(const & dirspec = wxEmptyString)
判断目录中是否含有子目录, 当目录中含有任何子目录时返回 true (如果 filespec 不为空, 仅检查是否有与其相匹配的子目录)。 隐藏目录也在查找的范围内。
wxDir::IsOpened
bool IsOpened() const
如果目录已经被 函数成功打开, 返回 true 。
wxDir::Open
bool Open(const & dir)
为枚举打开目录, 返回 true 表示成功, false 表示发生了错误。
wxDir::Traverse
size_t Traverse(& sink, const & filespec = wxEmptyString, int flags = wxDIR_DEFAULT)
通过递归方式进行枚举, 每枚举到一个文件或目录都会交给 对象进行处理。
//译者注: wxDirTraverse是个抽象类, 你需要继承并且实现它的OnFile, OnDir方法以自定义你想要的操作。
更准确的说, 当 flags 含有 wxDIR_DIRS 标识符时该函数通过递归方式进入到子目录。如果 wxDIR_FILES 存在时, 它将忽略文件 (但是尽可能的递归进入到子目录)。
每发现一个目录, 就会被调用并且 函数将会被每个文件调用。 通过返回值决定枚举是否继续进行。
该函数将返回所有枚举到的文件数, 返回 (size_t)-1 时表示遇到错误。
参见:
官方原文:
[译者注] 本文翻译不具有任何权威性, 且不代表原文观点, 请谨慎参阅。
wid, 2013.03.01