MFC對檔案按檔名進行排序
阿新 • • 發佈:2019-01-30
用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>
原文地址:http://bbs.csdn.net/topics/220078959CFileFind 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);