怎么扫描空文件夹

其思路就是递归查找文件,然后判断文件夹中有无文件,如果没有文件则是空的文件夹。

效果如图:
怎么扫描空文件夹_第1张图片

实现代码如下:

int SearchFile(TCHAR* szPath,std::vector<std::string>& PathName)
{
    int iFileCount = 0;              //文件夹中的文件个数
    WIN32_FIND_DATA windata = { 0 };            
    HANDLE hFile = NULL;
    TCHAR szPathNext[MAX_PATH];     
    ZeroMemory(szPathNext, sizeof(szPathNext));
    sprintf(szPathNext, "%s\\*.*", szPath);     
    hFile = FindFirstFile(szPathNext, &windata);
    if (hFile == INVALID_HANDLE_VALUE)
        return -1;
    do
    {
        if (windata.cFileName[0] == '.')
            continue;
        if (windata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            //这里也要进行++,因为防止递归回来的时候返回的文件个数为0,也就是说把文件夹也算作一个文件处理
            //比如:C:\\temp\\1\\2\\3,1文件夹有一个2文件夹,2又有3文件夹
            //3文件夹中没有任何文件,所以认定3是空文件夹,当递归回来的时候2 1 文件夹都会返回1,3则返回0.
            ++iFileCount;   
            sprintf(szPathNext, "%s\\%s", szPath, windata.cFileName);
            //递归继续查找下一个文件夹
            if (0 == SearchFile(szPathNext, PathName)) //如果文件夹中没有文件就会返回0
            {
                PathName.push_back(szPathNext); //把空文件夹的路径保存起来
            }

        }
        else
        {
            ++iFileCount;//如果是文件就++
        }
    } while (FindNextFile(hFile, &windata));
    if(hFile)
        FindClose(hFile);
    return iFileCount;
}

如果想删除空文件夹的话用
BOOLRemoveDirectory
(
LPCSTR lpPathName //文件夹路径
)

你可能感兴趣的:(删除文件夹,查找文件,扫描空文件,RemoveDire)