一般我们可以很轻松的使用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"));