用 FindFirstFile(),得到一个句柄, 然后用FindNextFile()对文件进行遍历,
问题是找到的文件是以什么顺序排列的,如果我想要找到的文件以文件名进行排列有什么方法?
例如我在一个目录下有
01.txt
06.txt
03.txt
05.txt
04.txt
02.txt
这几个文件,我希望找到的每一个文件是01.TXT,每二个是 02.TXT......
但是我发现FindNextFile 并不是每次都这样排列,有时候按这个顺序,有时候不是,有方法可以解决吗?
问题是找到的文件是以什么顺序排列的,如果我想要找到的文件以文件名进行排列有什么方法?
例如我在一个目录下有
01.txt
06.txt
03.txt
05.txt
04.txt
02.txt
这几个文件,我希望找到的每一个文件是01.TXT,每二个是 02.TXT......
但是我发现FindNextFile 并不是每次都这样排列,有时候按这个顺序,有时候不是,有方法可以解决吗?
API就是没有顺序的,一会这样的顺序,一会又那样.
TCHAR sFileName[MAX_PATH];
memset(sFileName,0,sizeof(sFileName));
int iFileTot = 0,ii = 0;
HANDLE hFind;
WIN32_FIND_DATA wfd;
for(ii=0;ii<sizeof(szSupportFile)/sizeof(szSupportFile[0]);ii++)
{
swprintf(sFileName,_T("%s\\%s"),pDoc->m_strSRC,szSupportFile[ii]);
hFind = FindFirstFile(sFileName,&wfd);
if (hFind==INVALID_HANDLE_VALUE)
{
continue;
}
else
{
do
{
iFileTot++;
}while(FindNextFile(hFind,&wfd));
}
FindClose(hFind);
}
pDoc->m_iFileTotal = iFileTot; //保存文件名
if(pDoc->m_strFileNameList)
{
delete[] pDoc->m_strFileNameList;
pDoc->m_strFileNameList = NULL;
}
pDoc->m_strFileNameList=new CString[iFileTot+1];
iFileTot=0;
for(ii=0;ii<sizeof(szSupportFile)/sizeof(szSupportFile[0]);ii++)
{
swprintf(sFileName,_T("%s\\%s"),pDoc->m_strSRC,szSupportFile[ii]);
hFind=FindFirstFile(sFileName,&wfd);
if (hFind==INVALID_HANDLE_VALUE)
{
continue;
}
do
{
pDoc->m_strFileNameList[iFileTot] +=pDoc->m_strSRC;
pDoc->m_strFileNameList[iFileTot] +="\\";
pDoc->m_strFileNameList[iFileTot] += _wcsupr(wfd.cFileName);
iFileTot++;
}while(FindNextFile(hFind,&wfd));
FindClose(hFind);
} //对文件名进行冒泡排序。
int i,j,m,n,k;
TCHAR tmp[64]={0};
n=iFileTot;
k=0;
m=n-1;
while (k<m)
{
j=m-1;
m=0;
for (i=k;i<=j;i++)
{
if (wcscmp(pDoc->m_strFileNameList[i],pDoc->m_strFileNameList[i+1])>0)
{
wcscpy(tmp,pDoc->m_strFileNameList[i]);
pDoc->m_strFileNameList[i]=pDoc->m_strFileNameList[i+1];
pDoc->m_strFileNameList[i+1]=tmp;
m=i;
}
}
j=k+1;
k=0;
for (i=m;i>=j;i--)
{
if (wcscmp(pDoc->m_strFileNameList[i-1],pDoc->m_strFileNameList[i])>0)
{
wcscpy(tmp,pDoc->m_strFileNameList[i]);
pDoc->m_strFileNameList[i]=pDoc->m_strFileNameList[i-1];
pDoc->m_strFileNameList[i-1]=tmp;
k=i;
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////
//pDoc->m_strSRC,表示处理路径
//pDoc->m_iFileTotal,文件总数
//pDoc->m_strFileNameList,表示文件名列表