MFC中的CFindFile有个FindNextFile()函数

MFC中的CFindFile有个FindNextFile()函数,为什么感觉有些文件没有遍历到呢??.h文件我创建5个,为什么只检测出4个,而当.h的文件名是英文就会检测... MFC中的CFindFile有个FindNextFile()函数,为什么感觉有些文件没有遍历到呢??.h文件我创建5个,为什么只检测出4个,而当.h的文件名是英文就会检测出5个。。是怎么回事findFile.FindFile(fileName "\\*.*");findFileCont.FindFile(fileName "\\*.*");//这里主要是求得要改名文件的个数while(findFileCont.FindNextFile()){if(!findFileCont.IsDirectory()){CString filePath;char Dirve[256] = "";char Dir[256] = "";char Tilte[256] = "";char Ext[256] = "";filePath = findFileCont.GetFilePath();_splitpath(filePath.GetBuffer(0), Dirve, Dir, Tilte, Ext);if(strcmp(Ext, ".h") == 0){fileNum ;}}}findFileCont.Close(); 展开
 我来答
Unkn0wName
2012-11-07 · TA获得超过106个赞
知道小有建树答主
回答量:243
采纳率:0%
帮助的人:133万
展开全部

你是要寻找文件的例子吧


给你个例子


删除文件夹

删除文件夹你在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);//删除目录

}

百度网友96ffcf7
推荐于2018-03-29 · 知道合伙人互联网行家
百度网友96ffcf7
知道合伙人互联网行家
采纳数:22721 获赞数:118726
从事多年网络方面工作,有丰富的互联网经验。

向TA提问 私信TA
展开全部
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());
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e096309
2014-08-28 · TA获得超过1327个赞
知道小有建树答主
回答量:501
采纳率:96%
帮助的人:416万
展开全部
FindNextFile的返回值比较蛋疼,他是刚刚好遍历到最后一个文件的时候,给你返回false,也就意味着最后一个文件还没处理就退出while了。
所以得写成这样:
BOOL bRes = ff.FindFile(.....);
while(bRes)
{
bRes = ff.FindNextFile();// 遍历到最后一个文件的时候,bRes变成false。下面先处理了这个文件,之后才退出循环。
if (!ff.IsDirectory())
{...}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式