MFC 删除具有子文件夹或文件夹内有子文件的方法

比如我的D盘里有一个文件D:\Test,此时Test为一个空文件夹:

创建此文件夹的方法为:

CreateDirectory(_T("D:\\Test"),NULL);

删除此空文件夹的方法为:

RemoveDirectory((_T("D:\\Test"));

这只能删除文件夹内毫无内容的空文件夹,不能删除具有子文件夹或子文件的文件夹.

这里使用 SHFILEOPERATION 这个方法,但是用的是它的参数结构体:

函数原型:

  #include<shellapi.h>

  WINSHELLAPI int WINAPI SHFileOperation(LPSHFILEOPSTRUCT lpFileOp);

SHFILEOPSTRUCT

此结构体原型为:

typedef struct _SHFILEOPSTRUCT 
 
  { 
 
  HWND hwnd; //父窗口句柄 
 
  UINT wFunc; //要执行的动作 
 
  LPCTSTR pFrom; //源文件路径,可以是多个文件 
 
  LPCTSTR pTo; //目标路径,可以是路径或文件名 
 
  FILEOP_FLAGS fFlags; //标志,附加选项 
 
  BOOL fAnyOperationsAborted; //是否可被中断 
 
  LPVOID hNameMappings; //文件映射名字,可在其它 Shell 函数中使用 
 
  LPCTSTR lpszProgressTitle; // 只在 FOF_SIMPLEPROGRESS 时,指定对话框的标题。 
 
  } SHFILEOPSTRUCT, FAR *LPSHFILEOPSTRUCT
详细内容参见百度百科http://baike.baidu.com/view/1719618.htm或者MSDN

比如现在的删除文件夹函数为

BOOL DeleteFolderDirectory( LPCTSTR lpszPath)

{

  SHFILEOPSTRUCT FileOp;

 ZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT));

 FileOp.Flag = 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;

}

这个函数就可以删除具有子文件夹或文件的文件夹了.

但是对于 SHFILEOPSTRUCT 有一个要求,就是

pForm 或者pTo 可以指定多个路径,在结束之前要加 '\0\0';才可以正常结束,

因为我使用的是CString 类型的字符串处理,它结束时候的处理是不一样的,CString 内部处理是一个 char* ,然后结束是加了一个'\0'结束的,

因此将 CString 类型的变量 其内容拷贝到数组当中:

     TCHAR arrTemp[100] = {0};
    memcpy(arrTemp,folderPath+_T("\0\0"),(folderPath.GetLength()+2)*sizeof(TCHAR));

     DeleteFolderDirectory(arrTemp);

这样就不会报读取磁盘错误的报告了.

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值