Windows刪除文件夾


方法一:

利用API函數SHFileOperation實現的刪除函數,能夠一次刪除目錄及其下面的子目錄和文件 或者 刪除單個的文件

// 刪除文件(第二個參數bDelete表示是否刪除至回收站,默認刪除到回收站)
BOOL RecycleFileOrFolder(CString strPath, BOOL bDelete/*=FALSE*/)
{
    strPath += '\0';
    SHFILEOPSTRUCT  shDelFile;
    memset(&shDelFile,0,sizeof(SHFILEOPSTRUCT));
    shDelFile.fFlags |= FOF_SILENT;                // 不顯示進度
    shDelFile.fFlags |= FOF_NOERRORUI;            // 不報告錯誤信息
    shDelFile.fFlags |= FOF_NOCONFIRMATION;        // 直接刪除,不進行確認
 
    // 設置SHFILEOPSTRUCT的參數為刪除做准備
    shDelFile.wFunc = FO_DELETE;        // 執行的操作
    shDelFile.pFrom = strPath;            // 操作的對象,也就是目錄(注意:以“\0\0”結尾)
    shDelFile.pTo = NULL;                // 必須設置為NULL
    if (bDelete) //根據傳遞的bDelete參數確定是否刪除到回收站
    {    
        shDelFile.fFlags &= ~FOF_ALLOWUNDO;    //直接刪除,不進入回收站
    } 
    else 
    {           
        shDelFile.fFlags |= FOF_ALLOWUNDO;    //刪除到回收站
    }
 
    BOOL bres = SHFileOperation(&shDelFile);    //刪除
    return !bres;
}

方法二:

bool DeleteDirectory(const CString& strDirName)
{
    CFileFind tempFind;
    TCHAR sTempFileFind[200];
    _tcscpy_s(sTempFileFind, strDirName);
    _tcscat_s(sTempFileFind, L"\\*.*");
    BOOL IsFinded = tempFind.FindFile(sTempFileFind);
    while (IsFinded)
    {
        IsFinded = tempFind.FindNextFile();
        if (!tempFind.IsDots())
        {
            CString strPath;
            strPath += strDirName;
            strPath += L"\\";
            strPath += tempFind.GetFileName();
            if (tempFind.IsDirectory())
            {
                DeleteDirectory(strPath);
            }
            else
            {
                SetFileAttributes(strPath, FILE_ATTRIBUTE_NORMAL); //去掉文件的系統和隱藏屬性
                DeleteFile(strPath);
            }
        }
    }
    tempFind.Close();
    if (!RemoveDirectory(strDirName))
    {
        return FALSE;
    }
    return TRUE;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM