使用MFC中的API进行读取文件夹里面的文件的时候,读取的顺序是按照硬盘存储的顺序进行读取的,因此读取的文件名字的序号不是从小到大排序。
下面的代码可以实现从MFC中读取文件夹里面的文件名,同时还利用STL的方法进行了排序。
//全局谓词
bool SortbynumASC(const CString& x, const CString& y)
{
int nLeft, nRight;
nLeft = atoi( GetAnsiString(x.Left(x.ReverseFind('.')).GetBuffer(0)) );
nRight = atoi( GetAnsiString(y.Left(y.ReverseFind('.')).GetBuffer(0)) );
return nLeft<nRight;
}
/*************************************************************************/
void GainPointCloud::SearchFiles(CString strMusicFolder, vector<CString> &m_FileList)
{
CFileFind ff;
CString strFile;
strMusicFolder += _T("\\");
strMusicFolder += _T("*.*");
BOOL res = ff.FindFile(strMusicFolder);
while (res)
{
res = ff.FindNextFile();
if (!ff.IsDirectory() && !ff.IsDots())
{
strFile = ff.GetFileName();
m_FileList.push_back(strFile);
}
}
ff.Close();
sort(m_FileList.begin(), m_FileList.end(), SortbynumASC);
return;
}