回 帖 发 新 帖 刷新版面

主题:MFC查找文件

在使用MFC中CFileFind 查找文件时,一般都是FindFile和FindNextFile配合使用,得到目录下的所有文件。但我想查找一个确定的文件,得到该文件的大小、图标等信息时,该怎么办?
例如:
BOOL bfinded=filefd.FindFile("C:\a.txt");
if(filefd.IsDirectory()&&!filefd.IsDots())
就会出现问题,怎么解决?

回复列表 (共1个回复)

沙发

给你个例子,计算文件夹下文件个数
int FindFileNumber( )
{
    CString strPath,  strPattern;   
    BYTE data[8]  =  {'\0'};   
    BOOL bRC  =  TRUE;   
    int i = 0 ;
    HANDLE hFind  =  NULL;   
    WIN32_FIND_DATA FindFileData;   
    
    //strPattern   =   "D:\\33e\\*.*";//目录   
    hFind  =  ::FindFirstFile(strPattern,   &FindFileData); //   strat   search   
    if(hFind == INVALID_HANDLE_VALUE)   
    {   
        LPVOID     msg;   
        ::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER  |  FORMAT_MESSAGE_FROM_SYSTEM,     
            NULL,  GetLastError(),     
            MAKELANGID(LANG_NEUTRAL,  SUBLANG_DEFAULT),   
            (LPTSTR)&msg,  0,  NULL);   
        ::LocalFree(msg);   
        return  -1;   
    }   
    
    strPath  =  FindFileData.cFileName;//取得文件名   
    
    
    while(bRC)   
    {   
        bRC  =  ::FindNextFile(hFind,   &FindFileData);   
        if(bRC)   
        {   
            strPath  =  FindFileData.cFileName;//取得文件名   
            i++;
        }   
        else   
        {   
            DWORD  err  =  ::GetLastError();   
            if(err != ERROR_NO_MORE_FILES)   
            {   
                LPVOID  msg;   
                ::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,     
                    NULL,  err,     
                    MAKELANGID(LANG_NEUTRAL,  SUBLANG_DEFAULT),   
                    (LPTSTR)&msg, 0, NULL);      
                ::LocalFree(msg);   
                ::FindClose(hFind);   
                return   -1;   
            }   
        }   
    }   
    
    ::FindClose(hFind);
    return i-1;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册