c++删除文件夹

来源:互联网 发布:家政网络平台 编辑:程序博客网 时间:2024/06/08 00:16

转自: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
原创粉丝点击