1. 程式人生 > >MFC對檔案按檔名進行排序

MFC對檔案按檔名進行排序

用CFileFind類遍歷一個資料夾下的檔案,發現它並不是按照windows標準的按檔名排序方式排序的,比如說1.txt,2.txt,3.txt,4.txt,5.txt,...80.txt,81.txt,...100.txt,101.txt.....在windows下應該是這樣的順序,但是讓CFileFind類遍歷後卻成了1.txt。10.txt,100.txt,2.txt
#include <algorithm> 
#include <vector>
CFileFind finder;
std::vector<CString> fileList;
 
// 加入檔案到fileList中
BOOL bHaveFiles = finder.FindFile("*.*");
while (bHaveFiles)
{
    bHaveFiles = finder.FindNextFile();
    fileList.push_back(finder.GetFileName());
}
 
// 寫一個全域性的謂詞函式
// 升序排列
bool SortbyNumASC(const CString& x, const CString& y)
{
    int nLeft, nRight;
    nLeft = atoi(x.Left(x.ReverseFind('.')).GetBuffer(0));
    nRight = atoi(y.Left(y.ReverseFind('.')).GetBuffer(0));
    return nLeft<nRight;
}
 
// 降序排列
bool SortbyNumDESC(const CString& x, const CString& y)
{
    int nLeft, nRight;
    nLeft = atoi(x.Left(x.ReverseFind('.')).GetBuffer(0));
    nRight = atoi(y.Left(y.ReverseFind('.')).GetBuffer(0));
    return nLeft>nRight;
}
 
// 排序
/// 由大到小排
sort(fileList.begin(), fileList.end(), SortbyNumDESC);
 
/// 由小到大排
sort(fileList.begin(), fileList.end(), SortbyNumASC);
原文地址:http://bbs.csdn.net/topics/220078959