用 FindFirstFile(),得到一个句柄, 然后用FindNextFile()对文件进行遍历,
问题是找到的文件是以什么顺序排列的,如果我想要找到的文件以文件名进行排列有什么方法?
例如我在一个目录下有
01.txt
06.txt
03.txt
05.txt
04.txt
02.txt
这几个文件,我希望找到的每一个文件是01.TXT,每二个是 02.TXT......
但是我发现FindNextFile 并不是每次都这样排列,有时候按这个顺序,有时候不是,有方法可以解决吗?

解决方案 »

  1.   

    Windows API给你的,就是按照某种顺序给你的,想得到你自己的顺序,还是要自己写代码的。
      

  2.   


     API就是没有顺序的,一会这样的顺序,一会又那样.
      

  3.   

    TCHAR szSupportFile[][10] = {_T("*.txt")};
    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,表示文件名列表