比如我的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);
这样就不会报读取磁盘错误的报告了.