c++删除文件夹

转自:http://blog.csdn.net/sshhbb/archive/2010/12/07/6061029.aspx

 

c++语言本身是不能删除文件或文件夹的,他们是windows操作系统里的东西,所以得借助其api函数。

其一:使用shell  接口:

void FileDelete(CString directory)
{
 SHFILEOPSTRUCT    shFileOp;
 char      strCurrentPath[MAX_PATH];
 memset(&shFileOp,0,sizeof(shFileOp));
    
 GetCurrentDirectory(MAX_PATH,strCurrentPath);
 strcat_s(strCurrentPath,sizeof(strCurrentPath),directory);
 strCurrentPath[strlen(strCurrentPath)+1] = 0;
 shFileOp.wFunc    = FO_DELETE;
 shFileOp.pFrom    = strCurrentPath;
 shFileOp.pTo    = NULL;
 shFileOp.fFlags    = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;

 SHFileOperation(&shFileOp);
}

使用该函数你得 #include<Shlwapi.h> #pragma comment(lib,"Shlwapi.lib")  使用他可以将directory和其下的所有文件静默删除,听说在删除共享文件夹的时候会出错或提示,没试过。不过我使用system()做删除的时候共享文件夹下的删除是会出错的。

其二: 使用MFC的CFileFind递归遍历文件并删除文件和文件夹

 bool DeleteDirectory(char* strDirName)
{
    CFileFind tempFind;
    
    char strTempFileFind[MAX_PATH];

    sprintf(strTempFileFind,"%s//*.*", strDirName);

    BOOL IsFinded = tempFind.FindFile(strTempFileFind);

    while (IsFinded)
    {
        IsFinded = tempFind.FindNextFile();

        if (!tempFind.IsDots()) 
        {
            char strFoundFileName[MAX_PATH];

            strcpy(strFoundFileName, tempFind.GetFileName().GetBuffer(MAX_PATH));

            if (tempFind.IsDirectory())
            {
                char strTempDir[MAX_PATH];

                sprintf(strTempDir,"%s//%s", strDirName, strFoundFileName);

                DeleteDirectory(strTempDir);
            }
            else
            {
                char strTempFileName[MAX_PATH];

                sprintf(strTempFileName,"%s//%s", strDirName, strFoundFileName);

                DeleteFile(sTempFileName);
            }
        }
    }

    tempFind.Close();

    if(!RemoveDirectory(strDirName))
    {
        return FALSE;
    }

    return TRUE;
}

 

//

 

转自:http://zhidao.baidu.com/question/188089955.html

 

 

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void main()
{
 char str[120] ="RMDIR /S "; //加上 /Q  删除时不要求确认
 char str2[100]; //文件夹的绝对路径
 printf("输入的文件夹位置为:/n"); 
 scanf("%s",str2);
 strcat(str,str2);
 system(str);
 system("pause");
} 
<p> </p><pre class="answer-content" name="code" style="white-space: pre-wrap; word-wrap: break-word;">方便的办法,你可以使用dos命令,在C++里可以用system调用
比如system("RMDIR aaa");
就是删掉aaa这个目录
dos命令可以在cmd里打help回车查看
 
<a target=_blank href="http://topic.csdn.net/u/20090126/23/950e840e-8ba9-4be7-94ba-2e48e7cdf862.html" style="color: rgb(51, 102, 153); text-decoration: none;">http://topic.csdn.net/u/20090126/23/950e840e-8ba9-4be7-94ba-2e48e7cdf862.html</a>
BOOL DeleteDir(<span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);"> path)
{
    WIN32_FIND_DATA finddata;
    HANDLE hfind;
    </span><span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);"> pdir;

    pdir</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);">[strlen(path)</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(128, 0, 128);">5</span><span style="color: rgb(0, 0, 0);">];
    strcpy(pdir,path);
    </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(path[strlen(path)</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(128, 0, 128);">1</span><span style="color: rgb(0, 0, 0);">]</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">//</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">)
        strcat(pdir,</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">//*.*</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);
    </span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">
        strcat(pdir,</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">*.*</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);

    hfind</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">FindFirstFile(pdir,</span><span style="color: rgb(0, 0, 0);">&</span><span style="color: rgb(0, 0, 0);">finddata);
    </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(hfind</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">INVALID_HANDLE_VALUE)
        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> FALSE;

    delete []pdir;
    </span><span style="color: rgb(0, 0, 255);">do</span><span style="color: rgb(0, 0, 0);">
    {
        pdir</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);">[strlen(path)</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">strlen(finddata.cFileName)</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(128, 0, 128);">2</span><span style="color: rgb(0, 0, 0);">];
        sprintf(pdir,</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">%s//%s</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,path,finddata.cFileName);
        </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(strcmp(finddata.cFileName,</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">.</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(128, 0, 128);">0</span><span style="color: rgb(0, 0, 0);">
            </span><span style="color: rgb(0, 0, 0);">||</span><span style="color: rgb(0, 0, 0);">strcmp(finddata.cFileName,</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">..</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(128, 0, 128);">0</span><span style="color: rgb(0, 0, 0);">)
        {
            RemoveDirectory(pdir);
            </span><span style="color: rgb(0, 0, 255);">continue</span><span style="color: rgb(0, 0, 0);">;
        }

        </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">((finddata.dwFileAttributes </span><span style="color: rgb(0, 0, 0);">&</span><span style="color: rgb(0, 0, 0);"> FILE_ATTRIBUTE_DIRECTORY)</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(128, 0, 128);">0</span><span style="color: rgb(0, 0, 0);">)
            DeleteFile(pdir);
        </span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">
            DeleteDir(pdir);
        delete []pdir;
    }</span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">(FindNextFile(hfind,</span><span style="color: rgb(0, 0, 0);">&</span><span style="color: rgb(0, 0, 0);">finddata));

    </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(RemoveDirectory(path))
        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> TRUE;
    </span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">
        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> FALSE;
}
</span>//
<p>转自:<a target=_blank href="http://zhidao.baidu.com/question/96292128.html" style="color: rgb(51, 102, 153); text-decoration: none;">http://zhidao.baidu.com/question/96292128.html</a></p><h3 style="margin: 0px; padding: 0px;"><span class="link_title">c++删除空文件夹</span></h3>使用方法:
char dir[] = "d://test//";
DeleteEmptyDirectories(dir);
/
void DeleteEmptyDirectories(const char *dir)
{

WIN32_FIND_DATA finder;
    HANDLE hFileFind;
    char search[MAX_PATH];
strcpy(search, dir);
strcat(search, "*.*");

    hFileFind = FindFirstFile(search, &finder);

    if (hFileFind != INVALID_HANDLE_VALUE)
    {
        do
        {
            char path[MAX_PATH];
            strcpy(path, dir);
            strcat(path, finder.cFileName);
   
   if ((finder.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    && strcmp(finder.cFileName, ".")
    && strcmp(finder.cFileName, ".."))
   {
    
    char subdir[MAX_PATH];
    strcpy(subdir, path);
    strcat(subdir, "//");

    DeleteEmptyDirectories(subdir);
    // AfxMessageBox(subdir);
    RemoveDirectory(path);
   }
   
        } while (FindNextFile(hFileFind, &finder) != 0);
  
        FindClose(hFileFind);
    }
}
另外,用SHFILEOPSTRUCT、SHFileOperation也可以删除文件夹。

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值