SHFileOperation

typedef struct _SHFILEOPSTRUCT {
    HWND hwnd;    //父窗口句柄
    UINT wFunc;  //执行的操作类型:复制、删除、移动、重命名
    LPCTSTR pFrom; //源文件的地址全名字符串指针
    LPCTSTR pTo;  //目标文件的地址全名字符串指针
    FILEOP_FLAGS fFlags;    //附加标志选项
    BOOL fAnyOperationsAborted;  //是否允许被打断
    LPVOID hNameMappings;      //文件映射名字(一般用不到)
    LPCTSTR lpszProgressTitle; //进度条名字,只在fFlags=FOF_SIMPLEPROGRESS时有效
} SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;

int SHFileOperation{
          LPSHFILEOPSTRUCT lpFileOp
};

先讲讲SHFILEOPSTRUCT这个类型的数据参数设置(其实大家可以自己看MSDN,我是基本上翻译的MSDN):

hwnd 可以为:
      this->m_hwnd;也就是自己的程序句柄,留空也可
wFunc 可以为:
  FO_MOVE 0x0001 移动文件
  FO_COPY 0x0002 复制文件
  FO_DELETE 0x0003 删除文件,只使用 pFrom
  FO_RENAME 0x0004 文件重命名
fFlags可以为:
  FOF_MULTIDESTFILES 0x0001 //pTo 指定了多个目标文件,而不是单个目录
  FOF_CONFIRMMOUSE 0x0002
  FOF_SILENT 0x00044 // 不显示一个进度对话框
  FOF_RENAMEONCOLLISION 0x0008 // 碰到有抵触的名字时,自动分配前缀
  FOF_NOCONFIRMATION 0x0010 // 不对用户显示提示
  FOF_WANTMAPPINGHANDLE 0x0020 // 填充 hNameMappings 字段,必须使用 SHFreeNameMappings 释放
  FOF_ALLOWUNDO 0x0040 // 允许撤销
  FOF_FILESONLY 0x0080 // 使用 *.* 时, 只对文件操作
  FOF_SIMPLEPROGRESS 0x0100 // 简单进度条,意味者不显示文件名。
  FOF_NOCONFIRMMKDIR 0x0200 // 建新目录时不需要用户确定
  FOF_NOERRORUI 0x0400 // 不显示出错用户界面
  FOF_NOCOPYSECURITYATTRIBS 0x0800 // 不复制 NT 文件的安全属性
  FOF_NORECURSION 0x1000 // 不递归目录

看一个复制文件的例子:

SHFILEOPSTRUCT FileInfo;
FileInfo.hwnd=this->m_hWnd;
FileInfo.wFunc=FO_COPY;
FileInfo.pFrom=L"G://Windows7Build6956Ultimate.ISO";
FileInfo.pTo=L"E://";
FileInfo.fAnyOperationsAborted= true;  //可以被打断
FileInfo.fFlags=FOF_SIMPLEPROGRESS;
    FileInfo.lpszProgressTitle=L"复制文件";
int ret=SHFileOperation(&FileInfo);

这个例子是把G:/Windows7Build6956Ultimate.ISO复制到E:/,显示一个系统的进度条。

 

 

/   DelTree  
//   删除一个文件夹  
//   lpszPath   -   要删除的文件夹路径  
//   返回值:成功返回TRUE,否则返回FALSE  
//   备注:亦可用来删除单个文件  
//////////////////////////////////////////////////////////////////////////  

BOOL DelTree(LPCTSTR lpszPath)
{
    SHFILEOPSTRUCT FileOp;
    FileOp.fFlags = 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;
}

你可能感兴趣的:(SHFileOperation)