int SHFileOperation( LPSHFILEOPSTRUCT lpFileOp);
1 typedef struct _SHFILEOPSTRUCT {2 HWND hwnd;//指向发送消息的窗口3 UINT wFunc;//执行的操作4 LPCTSTR pFrom;//源文件名5 LPCTSTR pTo;//目标文件名6 FILEOP_FLAGS fFlags;//操作与确认标识7 BOOL fAnyOperationsAborted;//操作是否终止8 LPVOID hNameMappings;//文件映射9 LPCTSTR lpszProgressTitle;//进度条标题} SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;
wFunc:要执行的操作
1.FO_COPY:复制 2.FO_DELETE:删除 3.FO_MOVE:移动 4.FO_RENAME:重命名
pFrom:源文件名
MSDN上说要以两个\0结束,所以一般的字符串必须还要加上一个\0
如果不注意这个问题 报错:无法读取源文件或磁盘
比如:
1 // 错误的用法 2 LPTSTR pszSource = L"C:\\Windows"; 3 4 // 正确的用法 5 LPTSTR pszSource = L"C:\\Windows\0";
对于CString,正确的用法是这样的
1 CString strSource("C:\\Windows"); 2 3 strSource += '\0';//注意必须是'\0'而不是"\0"!~!!
fFlags:执行标识
1 FOF_SILENT //不产生正在复制的对话框 2 FOF_NOCONFIRMMKDIR//如果目的目录不存在,就默认创建 3 FOF_NOCONFIRMATION //不出现确认文件替换对话框(默认替换原来的文i件) 4 FOF_NOERRORUI//不出现错误对话框
SHFILEOPSTRUCT FileOp; FileOp.fFlags = FOF_NOCONFIRMATION; FileOp.hNameMappings = NULL; FileOp.hwnd = NULL; FileOp.lpszProgressTitle = NULL; FileOp.pFrom = strpath; FileOp.pTo = NULL; FileOp.wFunc = FO_DELETE; SHFileOperation(&FileOp);