vc++文件目录的删除

项目中突然要使用删除文件的功能,于是看看书,网上找找资料,总结了一些方法,其实都很简单的。希望对大家有帮助:

第一种方法:   定义一个文件类对象来操作
CFile   TempFile;  
  TempFile.Remove(指定文件名);

第二种方法:  使用系统函数 DeleteFile( LPCSTR filename )删除文件    _rmdir(),删除目录 DeleteDirectory(sTempDir);  删除目录 RemoveDirectory(sTempDir);删除目录
eg:  DeleteFile(   char   *tempFileName);  

上面提到的删除目录的方法只能删除空目录(即文件夹),如果目录下有文件或者子目录,就不能删除了,VC里好像没有直接的函数,只能手动写个函数来删除了:

 

【问题】怎样删除一个非空目录,及其目录里面所有内容:

【解答1】如果不进行递归删除。你可以使用API函数SHFileOperation,它可以一次删除目录及其下面的子目录和文件。

      示例代码:  

BOOL DelTree(LPCTSTR lpszPath)

{

    SHFILEOPSTRUCT FileOp;

    FileOp.fFlags = FOF_NOCONFIRMATION;

    FileOp.hNameMappings = NULL;

    FileOp.hwnd = NULL;

    FileOp.lpszProgressTitle = NULL;

    FileOp.pFrom = lpszPath;

    FileOp.pTo = NULL;

    FileOp.wFunc = FO_DELETE;

    return SHFileOperation(&FileOp) == 0;

}

【解答2】使用递归调用,逐个删除:

    示例代码:

BOOL DeleteDirectory(char *DirName)//如删除 DeleteDirectory("c://aaa")

{

      CFileFind tempFind;

      char tempFileFind[MAX_PATH];

      sprintf(tempFileFind,"%s//*.*",DirName);

      BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);

      while(IsFinded)

      {

          IsFinded=(BOOL)tempFind.FindNextFile();

          if(!tempFind.IsDots())

          {

              char foundFileName[MAX_PATH];

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

              if(tempFind.IsDirectory())

              {

                  char tempDir[MAX_PATH];

                  sprintf(tempDir,"%s//%s",DirName,foundFileName);

                  DeleteDirectory(tempDir);

              }

              else

              {

                  char tempFileName[MAX_PATH];

                  sprintf(tempFileName,"%s//%s",DirName,foundFileName);

                  DeleteFile(tempFileName);

              }

          }

      }

      tempFind.Close();

      if(!RemoveDirectory(DirName))

      {

          MessageBox(0,"删除目录失败!","警告信息",MB_OK);//比如没有找到文件夹,删除失败,可把此句删除

          return FALSE;

      }

      return TRUE;

}

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

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;

}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值