一般我们可以很轻松的使用 DelateFile 函数将文件删除,不过这样又一个缺陷就是删除的文件不经过回收站,要是误删除了就麻烦了,并不是所有的用户都会数据恢复。而微软也为我们提供了 Shellapi ,这里面的函数可以用来做一些特殊的操作。
这里我们使用 SHFileOperation 函数来操作,函数定义如下:
int SHFileOperation(
__in LPSHFILEOPSTRUCT lpFileOp
);
不过微软推荐在 Vista 和以后的平台上使用 IFileOperation 接口来替换这个函数。
这个参数很简单就是一个 SHFILEOPSTRUCT 结构体,该结构体定义如下:
typedef struct _SHFILEOPSTRUCT {
HWND hwnd;// 用来显示文件操作状态的对话框句柄
UINT wFunc;// 要执行的动作
LPCTSTR pFrom;// 源文件路径
LPCTSTR pTo;// 目标文件路径
FILEOP_FLAGS fFlags;// 理解附加的操作选项,可以使用 | 运算符
BOOL fAnyOperationsAborted;// 是否可中断
LPVOID hNameMappings;// 可以创建文件映射
LPCTSTR lpszProgressTitle;// 当标记为 FOF_SIMPLEPROGRESS 时指定窗口的名字
} SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;
参考连接: http://msdn.microsoft.com/en-us/library/bb759795%28v=vs.85%29.aspx
将文件不经过确认就直接移到回收站的代码如下:
BOOL DelFileToRecycle (LPCTSTR lpSourceFile )
{
SHFILEOPSTRUCT shFile ;
ZeroMemory (&shFile ,sizeof (shFile ));
shFile .pFrom = lpSourceFile ;
shFile .wFunc = FO_DELETE ;
// 静默,保留撤销(回收站),取消警告
shFile .fFlags = FOF_SILENT |FOF_ALLOWUNDO |FOF_NOCONFIRMATION ;
if (SHFileOperation (&shFile ) != 0 )
{
return FALSE ;
}
else
{
return TRUE ;
}
}
函数调用很简单:DelFileToRecycle (_T ("D:// 新建文本文档.txt" ));