Qt--文件名匹配 ftp下载界面
来源:互联网 发布:安装 windows 卡着不动 编辑:程序博客网 时间:2024/05/17 02:06
仅针对项目需求,没有Windows下的匹配法功能那么强大。
匹配函数:目前仅支持最多2个‘*’号(点号前一个,点后一个既是后缀名),占位符‘?’可以多个,但是必须连续。 如: kj1990*24???aa.*;
//函数功能: ftp下载界面 文件类型自主判断模块//参数:fileType:文件名 aryFileType:匹配类型//返回: false 匹配失败//返回: true 匹配成功bool ExcuThread::judgeInOrNot(const QString &fileType, const QStringList &aryFileType){ QStringList tempFileType = aryFileType; //获取后缀名 QString filePostfix = fileType.right(fileType.size()-fileType.lastIndexOf(".")); qDebug()<< fileType<<tempFileType; //1. 包括"*.*" if( tempFileType.contains("*.*") ) return true; //2. 文件后缀名不存在 if( tempFileType.filter(filePostfix.toUpper()).isEmpty() && tempFileType.filter(filePostfix.toLower()).isEmpty() && tempFileType.filter(".*").isEmpty()) return false; //3. 包括 "*" + 文件后缀名 if( tempFileType.contains("*"+filePostfix.toUpper()) || tempFileType.contains("*"+filePostfix.toLower())) return true; //4. 包含占位符,"*" 3种情况 QString tempStr; //4.1 同时包含?与 * if( !tempFileType.filter("?").isEmpty() && !tempFileType.filter("*").isEmpty() ){ for( int nPos = 0; nPos < tempFileType.size(); ++nPos ){ tempStr = tempFileType.at(nPos); if( tempStr.indexOf("*") != -1 && tempStr.indexOf("?") == -1 ){ //获取*前面字符 QString preListName = tempStr.left( tempStr.indexOf("*") ); QString preFileName = fileType.left(preListName.size()); //获取*后.前的字符 //*符号与.符号之间的字符一致 *符号的位置有3种情况: 1, *a.xxx 2, a*b.xxx 3, a*.xxx QString midTempStr = tempStr.mid(tempStr.indexOf("*")+1,tempStr.lastIndexOf(".")-tempStr.indexOf("*")-1); QString midFileStr = fileType.left(fileType.lastIndexOf(".")).right(midTempStr.size()); qDebug() << midTempStr << midFileStr; if( (preListName.operator ==(preFileName.toUpper() )|| preListName.operator ==(preFileName.toLower())) && (midTempStr.operator ==(midFileStr.toUpper()) || midTempStr.operator ==(midFileStr.toLower()))) return true; } else if( tempStr.indexOf("?") != -1 && tempStr.indexOf("*") == -1 ){ //获取?前面字符 QString preListName = tempStr.left( tempStr.indexOf("?") ); QString preFileName = fileType.left(tempStr.indexOf("?")); qDebug()<<preListName<<preFileName; //获取?后.前的字符 QString midTempStr = tempStr.mid(tempStr.lastIndexOf("?")+1,tempStr.lastIndexOf(".")-tempStr.lastIndexOf("?")-1); QString midFileStr = fileType.left(fileType.lastIndexOf(".")).right(midTempStr.size()); qDebug()<<midTempStr<<midFileStr<<midTempStr.size()<<fileType.left(fileType.lastIndexOf(".")+1); if( fileType.size() == tempStr.size() && (preListName.operator ==(preFileName.toUpper() )|| preListName.operator ==(preFileName.toLower())) && (midTempStr.operator ==(midFileStr.toUpper()) || midTempStr.operator ==(midFileStr.toLower()))) return true; } else{ //4.1.1 *符号在?符号前 if( tempStr.indexOf("*") < tempStr.indexOf("?") ){ //获取*前面字符 QString preListName = tempStr.left( tempStr.indexOf("*") ); QString preFileName = fileType.left(preListName.size()); //中间字符是否相同 QString midTempStr = tempStr.mid(tempStr.indexOf("*")+1,tempStr.indexOf("?")-tempStr.indexOf("*")-1); QString midFileStr = fileType.left(fileType.indexOf(".")-tempStr.lastIndexOf(".")+tempStr.indexOf("?")).right(midTempStr.size()); qDebug()<<midTempStr<<midFileStr<<midTempStr.size()<<fileType.left(fileType.indexOf(".")-tempStr.lastIndexOf("?")+tempStr.indexOf("?")-1); //末尾字符是否相同 QString endTempStr = tempStr.mid(tempStr.lastIndexOf("?")+1,tempStr.indexOf(".")-tempStr.lastIndexOf("?")-1); QString endFileStr = fileType.left(fileType.lastIndexOf(".")).right(endTempStr.size()); qDebug()<<endTempStr<<fileType.left(fileType.lastIndexOf("."))<<midTempStr.size()<<endFileStr; if((preListName.operator ==(preFileName.toUpper())|| preListName.operator ==(preFileName.toLower())) && (midTempStr.operator ==(midFileStr.toUpper()) || midTempStr.operator ==(midFileStr.toLower()))&& (endTempStr.operator ==(endFileStr.toUpper()) || endTempStr.operator ==(endFileStr.toLower()))) return true; } //4.1.2 *符号在?符号后 else if( tempStr.indexOf("*") > tempStr.lastIndexOf("?") ){ //获取?前面字符 QString preListName = tempStr.left( tempStr.indexOf("?") ); QString preFileName = fileType.left(preListName.size()); //中间字符是否相同 QString midTempStr = tempStr.mid(tempStr.lastIndexOf("?")+1,tempStr.indexOf("*")-tempStr.lastIndexOf("?")-1); QString midFileStr = fileType.mid(tempStr.lastIndexOf("?")+1,midTempStr.size()); qDebug()<<midTempStr<<midFileStr<<midTempStr.size(); //包含后缀为.* if( tempStr.indexOf(".*") > -1 ){ if((preListName.operator ==(preFileName.toUpper())|| preListName.operator ==(preFileName.toLower())) && (midTempStr.operator ==(midFileStr.toUpper()) || midTempStr.operator ==(midFileStr.toLower()))) return true; } //末尾字符是否相同 QString endTempStr = tempStr.mid(tempStr.indexOf("*")+1,tempStr.lastIndexOf(".")-tempStr.lastIndexOf("*")-1); QString endFileStr = fileType.left(fileType.lastIndexOf(".")).right(endTempStr.size()); qDebug()<<endTempStr<<endFileStr; if((preListName.operator ==(preFileName.toUpper())|| preListName.operator ==(preFileName.toLower())) && (midTempStr.operator ==(midFileStr.toUpper()) || midTempStr.operator ==(midFileStr.toLower())) && (endTempStr.operator ==(endFileStr.toUpper()) || endTempStr.operator ==(endFileStr.toLower()))) return true; } else{ QMessageBox::critical(0,QObject::tr("输入格式不正确,请重新输入匹配符"),NULL); return false; } } } } //4.2 只包含 ? else if( !tempFileType.filter("?").isEmpty() ){ for( int nPos = 0; nPos < tempFileType.size(); ++nPos ){ tempStr = tempFileType.at(nPos); //获取?前面字符 QString preListName = tempStr.left( tempStr.indexOf("?") ); QString preFileName = fileType.left(tempStr.indexOf("?")); qDebug()<<preListName<<preFileName; //获取?后.前的字符 QString midTempStr = tempStr.mid(tempStr.lastIndexOf("?")+1,tempStr.lastIndexOf(".")-tempStr.lastIndexOf("?")-1); QString midFileStr = fileType.left(fileType.lastIndexOf(".")).right(midTempStr.size()); qDebug()<<midTempStr<<midFileStr<<midTempStr.size()<<fileType.left(fileType.lastIndexOf(".")+1); if( fileType.size() == tempStr.size() && (preListName.operator ==(preFileName.toUpper() )|| preListName.operator ==(preFileName.toLower())) && (midTempStr.operator ==(midFileStr.toUpper()) || midTempStr.operator ==(midFileStr.toLower()))) return true; } } //4.3 只包含 * else if( !tempFileType.filter("*").isEmpty() ){ for( int nPos = 0; nPos < tempFileType.size(); ++nPos ){ tempStr = tempFileType.at(nPos); //获取*前面字符 QString preListName = tempStr.left( tempStr.indexOf("*") ); QString preFileName = fileType.left(preListName.size()); //获取*后.前的字符 //*符号与.符号之间的字符一致 *符号的位置有3种情况: 1, *a.xxx 2, a*b.xxx 3, a*.xxx QString midTempStr = tempStr.mid(tempStr.indexOf("*")+1,tempStr.lastIndexOf(".")-tempStr.indexOf("*")-1); QString midFileStr = fileType.left(fileType.lastIndexOf(".")).right(midTempStr.size()); qDebug() << midTempStr << midFileStr; if( (preListName.operator ==(preFileName.toUpper() )|| preListName.operator ==(preFileName.toLower())) && (midTempStr.operator ==(midFileStr.toUpper()) || midTempStr.operator ==(midFileStr.toLower()))) return true; } } //4.4 不包含?与 * else{ for( int nPos = 0; nPos < tempFileType.size(); ++nPos ){ tempStr = tempFileType.at(nPos); if( fileType.operator == (tempStr.toUpper()) || fileType.operator ==(tempStr.toLower())) return true; } } return false;}
- Qt--文件名匹配 ftp下载界面
- Qt实现FTP下载
- 解决ftp下载文件名乱码问题
- QT FTP上传,下载文件
- Qt之FTP上传/下载
- Qt之FTP上传/下载
- Qt之FTP上传/下载
- Qt之FTP上传/下载
- qt url下载链接 获取文件名
- qt url下载链接 获取文件名
- Ftp 命令, 匹配文件 ,多文件下载
- Linux输入文件名从FTP 指定目录下载 文件
- Windows下通过FTP自动上传和下载动态文件名
- Apache FTP文件上传、下载、修改文件名、删除
- Apache FTP多线程文件上传、下载、修改文件名、删除
- org.apache.commons.net.ftp.FTPClient----根据文件名,路径检索文件 FTP上传 下载 删除文件
- 利用org.apache.commons.net.ftp实现ftp下载,解决中文文件名乱码问题
- ftp 获取文件名出错
- mongodb集群
- my applicationContext.xml
- 简单选择排序(C语言实现)
- 在同一个表中关于 INSERT...SELECT MAX(x)+1 中引起的错(mysql)
- 接口和抽象类什么时候用
- Qt--文件名匹配 ftp下载界面
- Java_SVN客户端开发
- MFC之常用窗口风格
- DP系列之二进制状态压缩--杭电1074
- Python笔记(4):面向对象,迭代器,生产器
- Spring入门
- CLOSE_WAIT生成的原因
- 循环体内调试程序 ---(提高调试效率)
- 三层架构——系统用户登录模块功能实现