之前写了个文件重命名的程序,然后遇到点问题,那就是有漏掉的文件未查询到。经过一番调试,终于解决了问题。原来是没有将FindFile函数与FindNextFileA函数位置放好。实际上也是我没有将这两个函数理解好,因此在这里记录下来。
存储图片的文件夹:
先上代码:
CFileFind flFind;
CString szDir;
m_FileDir.GetWindowText(szDir);
BOOL IsFind2=flFind.FindFile(szDir + "\\*.*");
//统计位图数量
int nBmpCount = 0;
CFileFind flFindCount;
BOOL IsFind=flFindCount.FindFile(szDir + "\\*.*");
while (flFindCount.FindNextFileA())
{
//IsFind=flFindCount.FindNextFileA();
if (!flFindCount.IsDirectory())
{
CString szPath;
szPath = flFindCount.GetFilePath();
MessageBox(szPath);
char szLetter[128] = {0}; //盘符
char szCurDir[128] = {0}; //目录
char szName[128] = {0}; //文件名
char szExt[128] = {0}; //扩展名
_splitpath(szPath.GetBuffer(0), szLetter, szCurDir, szName, szExt); //分解目录
//判断文件扩展名
if (strcmp(szExt, ".bmp") == 0)
{
nBmpCount++;
}
}
}
刚开始的时候,我没有搞懂问题出在哪里。后来,我不断地断点调试,一直测一直测。最后发现是FindFile的问题。因此我加了一句MessageBox(szPath)调试代码,后来果真如我断点调试那样,漏了一个文件,就是因为FindFile这里。在while语句之前的已经检查遍历了一个文件,然后,在while语句之后,就把这个之前遍历的那个文件漏掉了。看下运行结果:
修改代码:
CFileFind flFind;
CString szDir;
m_FileDir.GetWindowText(szDir);
BOOL IsFind2=flFind.FindFile(szDir + "\\*.*");
//统计位图数量
int nBmpCount = 0;
CFileFind flFindCount;
BOOL IsFind=flFindCount.FindFile(szDir + "\\*.*");
while (IsFind)
{
IsFind=flFindCount.FindNextFileA();
if (!flFindCount.IsDirectory())
{
CString szPath;
szPath = flFindCount.GetFilePath();
MessageBox(szPath);
char szLetter[128] = {0}; //盘符
char szCurDir[128] = {0}; //目录
char szName[128] = {0}; //文件名
char szExt[128] = {0}; //扩展名
_splitpath(szPath.GetBuffer(0), szLetter, szCurDir, szName, szExt); //分解目录
//判断文件扩展名
if (strcmp(szExt, ".bmp") == 0)
{
nBmpCount++;
}
}
}
运行结果你自己试试,看看能不能把之前的那个新建文件夹里的四个图片呢。