当前位置: 代码迷 >> QT开发 >> 怎么使获取到某目录下的的文件名,按window系统的排序方式保存
  详细解决方案

怎么使获取到某目录下的的文件名,按window系统的排序方式保存

热度:183   发布时间:2016-04-25 03:10:30.0
如何使获取到某目录下的的文件名,按window系统的排序方式保存?
QStringList PlayerView::getToolZipPicture(const QString& zipPicturePath)
{
QStringList zipFileNameList;
QString path = zipPicturePath;
QDir *dir=new QDir(path);
QStringList filter;
QList<QFileInfo> *fileInfo=new QList<QFileInfo>(dir->entryInfoList(filter));

QString zipPictureName;
for(int file=0; file < fileInfo->count(); file++) {
qDebug() << "the file name is: " << fileInfo->at(file).fileName() << "the all name is: " <<fileInfo->count();
QString zipFileName = fileInfo->at(file).fileName();
if(QLatin1String(".") != zipFileName && QLatin1String("..") != zipFileName) {
zipFileNameList << zipFileName;
}
}
qApp->information(tr("there do not have zip file!"), this);
zipFileNameList.sort();
// qDebug() << "the list sort is: " << zipFileNameList;
foreach(QString m, zipFileNameList)
{
qDebug() << "the sorted file is :" << m;
}
return zipFileNameList;
}


如果用"k-1.jpg"  "k-2.jpg" "k-3.jpg""k-4.jpg""k-12.jpg""k-11.jpg""k-13.jpg""k-14.jpg"

上面代码输入为:
"k-1.jpg" "k-11.jpg""k-12.jpg""k-13.jpg""k-14.jpg" "k-2.jpg" "k-3.jpg""k-4.jpg"


我想要效果为: 
"k-1.jpg"  "k-2.jpg" "k-3.jpg""k-4.jpg""k-11.jpg""k-12.jpg""k-13.jpg""k-14.jpg"


是否有简单一点的方法可以实现?
------解决思路----------------------
引用:
QStringList PlayerView::getToolZipPicture(const QString& zipPicturePath)
{
QStringList zipFileNameList;
QString path = zipPicturePath;
QDir *dir=new QDir(path);
QStringList filter;
QList<QFileInfo> *fileInfo=new QList<QFileInfo>(dir->entryInfoList(filter));

QString zipPictureName;
for(int file=0; file < fileInfo->count(); file++) {
qDebug() << "the file name is: " << fileInfo->at(file).fileName() << "the all name is: " <<fileInfo->count();
QString zipFileName = fileInfo->at(file).fileName();
if(QLatin1String(".") != zipFileName && QLatin1String("..") != zipFileName) {
zipFileNameList << zipFileName;
}
}
qApp->information(tr("there do not have zip file!"), this);
zipFileNameList.sort();
// qDebug() << "the list sort is: " << zipFileNameList;
foreach(QString m, zipFileNameList)
{
qDebug() << "the sorted file is :" << m;
}
return zipFileNameList;
}


如果用"k-1.jpg"  "k-2.jpg" "k-3.jpg""k-4.jpg""k-12.jpg""k-11.jpg""k-13.jpg""k-14.jpg"

上面代码输入为:
"k-1.jpg" "k-11.jpg""k-12.jpg""k-13.jpg""k-14.jpg" "k-2.jpg" "k-3.jpg""k-4.jpg"


我想要效果为: 
"k-1.jpg"  "k-2.jpg" "k-3.jpg""k-4.jpg""k-11.jpg""k-12.jpg""k-13.jpg""k-14.jpg"


是否有简单一点的方法可以实现?

你想要的就是一个有序的排列对吧,QStringList他是一个无序的,也就是放在他里面的东西都是打乱了的,你可以用QVector,然后用push_back函数,
------解决思路----------------------
"k-1.jpg" "k-11.jpg""k-12.jpg""k-13.jpg""k-14.jpg" "k-2.jpg" "k-3.jpg""k-4.jpg" 这个排序是按字母名称来的
"k-1.jpg"  "k-2.jpg" "k-3.jpg""k-4.jpg""k-11.jpg""k-12.jpg""k-13.jpg""k-14.jpg" 想要得到这个排序可以用sscanf提取出中间的数字,按数字来排序就可以了。
------解决思路----------------------
使用 <algorithm>的sort排序算法。
你的编译器是什么版本的?要支持C++11才行,因为用了autolambda

结贴给分。不谢。
------解决思路----------------------
引用:
使用 <algorithm>的sort排序算法。


只适用于楼主说的有规律的情况。
升序排序,length小的在前。
出现“13.txt”、“13 - 1.txt”、然后又“14.txt”,就有问题了。
------解决思路----------------------
引用:
Quote: 引用:

使用 <algorithm>的sort排序算法。
你的编译器是什么版本的?要支持C++11才行,因为用了autolambda
结贴给分。不谢。

用的vs2010 ,不支持这种写法。std::sort()不存在。


auto是自动类型推断,这个关键字在2010版和2013版是不同的。
std::sort在标准库头文件 <algorithm>中。
Qt中也有一个qSort(),能实现同样的功能,不过在我用的Qt 5.3.2 中已经是被淘汰的了。
2010版真没有这个?那你赶紧换高版本的吧!
你可以把lambda换成一个函数。
比如:

bool testA(const QString &a, const QString &b) {
    return a.length( ) < b.length( ) && a > b;
}
  相关解决方案