中易网

MFC中的CFindFile有个FindNextFile()函数

答案:3  悬赏:80  
解决时间 2021-01-14 16:47
  • 提问者网友:寂寞梧桐
  • 2021-01-14 00:58
MFC中的CFindFile有个FindNextFile()函数
最佳答案
  • 二级知识专家网友:轻雾山林
  • 2021-01-14 01:19
CFileFind finder;
BOOL bWorking = finder.FindFile("*.*");//1
while (bWorking)
{
bWorking = finder.FindNextFile();//2
int i = m_listShowPicture.GetItemCount();//3
m_listShowPicture.InsertItem(i,"");
m_listShowPicture.SetItemText(i,0,finder.GetFileName());
}
上面程序完成文件遍历。
finder.FindNextFile();使用n次,找到的文件就是第n个。
即如果想使用CFileFind的成员函数,必须先初始化一次。
第一次用FindNextFile();找到是第一个文件,不是第二个。
总是这样一个过程:1:Find 2:Next 3:调用

由路径找到文件信息
void CMPEG2EncodeDlg::AddFileLink(CString filepath)
{
SHFILEINFO fileinfo;//文件信息结构,用来获取文件的图标
CFileFind filefd;//文件查找类
BOOL bContinue = filefd.FindFile(filepath); //1
if(bContinue)
{
filefd.FindNextFile();//2
SHGetFileInfo( filefd.GetFilePath(),
0,
&fileinfo,sizeof(fileinfo),
SHGFI_ICON);
int i = m_imagelist.Add(fileinfo.hIcon);//取得文件图标
m_listShowPicture.InsertItem(0,"",i);
m_listShowPicture.SetItemText(0,0,filefd.GetFileName());//3
m_listShowPicture.SetItemText(0,1,filefd.GetFilePath());
}
}
全部回答
  • 1楼网友:上分大魔王
  • 2021-01-14 03:16

你是要寻找文件的例子吧


给你个例子


删除文件夹
删除文件夹你在cmd里面删除试试,他会提示文件夹不为空不能删除。意思就是必须先删除文件夹里面的文件再删除文件夹


删除文件夹里面的文件,就要用到寻找所有文件,包括文件夹里面的文件夹(子文件夹)





*************************************************
函数名称:BianLiDel
函数功能:删除目录下所有文件,最后删除文件夹
返回值:成功返回TRUE 失败返回FALSE
************************************************
//以下是宽字节用法
//窄字节替换函数char sprintf strcmp 去掉_T()
//C:文件夹\WenJianJia 
//这时候会删除WenJianJia这个目录
BOOL  BianLiDel(wchar_t *path)
{
        wchar_t D_Path[MAX_PATH]={0};
        wsprintfW(D_Path,_T("%s*.*"),path);//在文件名后面加上*.*,输入C:文件夹\WenJianJia就会变成C:文件夹\WenJianJia*.*
        WIN32_FIND_DATA  wfd;//定义一个结构体
        ZeroMemory(&wfd,sizeof(WIN32_FIND_DATA));//清空结构体
        HANDLE fhn = FindFirstFile(D_Path,&wfd);//寻找第一个文件
        BOOL bRet = TRUE;//如果第一个文件找到了就进入循环
        while (bRet)
        {
                wchar_t tem[MAX_PATH]={0};
                if (wfd.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY&&_wcsicmp(_T("."),wfd.cFileName)!=0&&_wcsicmp(_T(".."),wfd.cFileName)!=0)
                {        //判断是否为目录 判断文件夹名字是否为'.'和'..'
                        wsprintfW(tem,_T("%s%s\"),path,wfd.cFileName);
                        BianLiDel(tem);//是目录就删除目录下的文件
                }else{
                        wsprintfW(tem,_T("%s%s"),path,wfd.cFileName);
                        SetFileAttributes(tem,FILE_ATTRIBUTE_NORMAL);
                        DeleteFile(tem);//不是就删除文件
                }
                ZeroMemory(&wfd,sizeof(WIN32_FIND_DATA));//清空结构体
                bRet = FindNextFile(fhn,&wfd);//寻找下一个文件
        }
        FindClose(fhn);//如果不关闭会一直提示被占用


        return RemoveDirectory(path);//删除目录
}
  • 2楼网友:北方的南先生
  • 2021-01-14 01:51
FindNextFile的返回值比较蛋疼,他是刚刚好遍历到最后一个文件的时候,给你返回false,也就意味着最后一个文件还没处理就退出while了。
所以得写成这样:
BOOL bRes = ff.FindFile(.....);
while(bRes)
{
bRes = ff.FindNextFile();// 遍历到最后一个文件的时候,bRes变成false。下面先处理了这个文件,之后才退出循环。
if (!ff.IsDirectory())
{...}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息