/** 列出该文件包内的所有文件 @Param 文件名字列表 @Param 遍历时是否递归 @Param 显示目录而非目录下文件 */ void FZipFilePack::ListFiles( AStringList& fileList,bool bRecurse,bool bDir ) { VFileInfoList::iterator itr; VFileInfoList::iterator end = m_FileInfos.end(); for( itr=m_FileInfos.begin();itr!=end;itr++ ) { if( ((itr->nCompressedSize != (size_t)-1) || (itr->nCompressedSize == (size_t)-1 && bDir)) && (bRecurse || itr->sPath.empty()) ) { fileList.push_back( itr->sFileName ); } } }
/** 查找指定的文件 @Param 存储文件名字的列表 @Param 用于匹配文件名的字符 @Param 遍历时是否递归 @Param 是否遍历目录 */ void FZipFilePack::FindFiles( AStringList& fileList,const AString& pattern, bool bRecurse,bool bDir ) { VFileInfoList::iterator itr; VFileInfoList::iterator end = m_FileInfos.end(); // 如果要查找的字符包含目录,则做一个全匹配 bool full_match = (pattern.find('/') != AString::npos || pattern.find('\\') != AString::npos); // 获取关键字的目录 AString directory; if( full_match ) { size_t pos1 = pattern.rfind( '/' ); size_t pos2 = pattern.rfind( '\\' ); if( pos1 == AString::npos || ((pos2 != AString::npos) && pos1 < pos2) ) pos1 = pos2; if( pos1 != AString::npos ) directory = pattern.substr( 0,pos1+1 ); } // 遍历文件信息 for( itr=m_FileInfos.begin();itr!=end;itr++ ) { if( ((itr->nCompressedSize != (size_t)-1) || (itr->nCompressedSize == (size_t)-1 && bDir)) && (bRecurse || itr->sPath == directory) ) { if( AStringUtil::Match(full_match ? itr->sFileName : itr->sBaseName,pattern) ) fileList.push_back( itr->sFileName ); } } }