要删除文件夹,我们可以用到SHFILEOPSTRUCT这种结构体,利用该结构体可以删除空文件夹和非空文件夹。
typedef struct _SHFILEOPSTRUCT{
HWND hwnd;
UINT wFunc;
LPCTSTR pFrom;
LPCTSTR pTo;
FILEOP_FLAGS fFlags;
BOOL fAnyOperationsAborted;
LPVOID hNameMappings;
LPCSTR lpszProgressTitle;
} SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;
第一个参数:hwnd指向当前窗口的句柄!
第二参数:wFunc标识对文件相关的操作!
-
FO_COPY
- Copy the files specified in the pFrom member to the location specified in the pTo member. FO_DELETE
- Delete the files specified in pFrom. FO_MOVE
- Move the files specified in pFrom to the location specified in pTo. FO_RENAME
- Rename the file specified in pFrom. You cannot use this flag to rename multiple files with a single function call. Use FO_MOVE instead.
pFrom: 指定资源的文件名,该文件名不能为空.
pTo:文件名相关的指针,该参数如果没有使用的话必须设为NULL, 其他相关的内容可以参照MSDN.
fFlags: 一些控制风格的操作一般我们都是选择FOF_NOCONFIRMATION或则FOF_SILENT删除到回收站中去!
然后使用SHFileOperation来配合结构体的使用.
下面举一例子来说明:
Cstring FilePathSave=_T("F:\\孙鑫VC++\\BMP\0")
TCHAR strChar[1024]={0};
strcpy(strChar,FilePathSave);
SHFILEOPSTRUCTA fpo;
fpo.hwnd=NULL;
fpo.pFrom=strChar;
fpo.wFunc=FO_DELETE;
fpo.pTo=NULL;
fpo.fFlags=FOF_SILENT|FOF_NOCONFIRMATION;
SHFileOperation(&fpo);
要记住第二个参数fpo.pFrom的参数要在相关的文件后面补一个\0符号,不然操作会出错!
因为Cstring类型的字符串系统不会为其后添加\0,转为TCHAR形式后需自己手动添加\0
也可把程序这样修改:
TCHAR *strChar;
strChar=FilePathSave.GetBuffer(FilePathSave.GetLength()+1);
strChar[_tcslen(strChar)+1]=0;
SHFILEOPSTRUCTA fpo;
fpo.hwnd=NULL;
fpo.pFrom=strChar;
fpo.wFunc=FO_DELETE;
fpo.pTo=NULL;
fpo.fFlags=FOF_SILENT|FOF_NOCONFIRMATION;
SHFileOperation(&fpo);
其中第三行代码是将TCHAR 指针最后一位加上一个\0 ;