现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

2个删除文件夹的函数

2012-08-19 06:53 工业·编程 ⁄ 共 1616字 ⁄ 字号 暂无评论

//删除文件夹目录(非空)

bool DeleteDirectory(char* sDirName)
{
    CFileFind tempFind;
    char sTempFileFind[200] ;
    sprintf(sTempFileFind,"%s*.*",sDirName);
    BOOL IsFinded = tempFind.FindFile(sTempFileFind);
    while (IsFinded)
    {
        IsFinded = tempFind.FindNextFile();
        if (!tempFind.IsDots())
        {
            char sFoundFileName[200];
            strcpy(sFoundFileName,tempFind.GetFileName().GetBuffer(200));
            if (tempFind.IsDirectory())
            {
                char sTempDir[200];
                sprintf(sTempDir,"%s/%s",sDirName,sFoundFileName);
                DeleteDirectory(sTempDir);
            }
            else
            {
                char sTempFileName[200];
                sprintf(sTempFileName,"%s/%s",sDirName,sFoundFileName);
                _DeleteFile(sTempFileName);
            }
        }
    }
    tempFind.Close();
    if(!RemoveDirectory(sDirName))
    {
        return FALSE;
    }
    return TRUE;
}
//下面是应用,CString m_strDir 是一个文件夹路径,如:d:downloadpic
BOOL DelAll()
{
    if(PathFileExists(m_strDir))     
        DeleteDirectory((LPSTR)(LPCTSTR)m_strDir);
    return 1;
}

// 删除文件夹及其所有内容
void RemoveFolder(const CString &strPathName)
{
    CString path = strPathName;
    if (path.Right(1) != _T("//"))
        path += _T("//");
    path += _T("*.*");
    CFileFind ff;
    BOOL res = ff.FindFile(path);
    while (res)
    {
        res = ff.FindNextFile();
        // 是文件时直接删除
        if (!ff.IsDots() && !ff.IsDirectory())
            DeleteFile(ff.GetFilePath());
        else if (ff.IsDots())
            continue;
        else if (ff.IsDirectory())
        {
            path = ff.GetFilePath();
            // 是目录时继续递归,删除该目录下的文件
            RemoveFolder(path);
            ::RemoveDirectory(path);
        }
    }
}

给我留言

留言无头像?