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;}


 

原创粉丝点击