天天看点

VC批量拷贝,移动,删除文件---SHFileOperation

  1. SHFileOperation  
  2. 函数功能描述:文件操作,与 Shell 的动作相同.  
  3. 函数原型:  
  4. #include<shellapi.h>  
  5. WINSHELLAPI int WINAPI SHFileOperation(LPSHFILEOPSTRUCT lpFileOp);  
  6. 参数:  
  7. typedef struct _SHFILEOPSTRUCT  
  8. {  
  9.         HWND            hwnd;   //父窗口句柄  
  10.         UINT            wFunc; //要执行的动作  
  11.         LPCTSTR         pFrom; //源文件路径,可以是多个文件  
  12.         LPCTSTR         pTo;    //目标路径,可以是路径或文件名  
  13.         FILEOP_FLAGS    fFlags; //标志,附加选项  
  14.         BOOL            fAnyOperationsAborted; //是否可被中断  
  15.         LPVOID          hNameMappings;         //文件映射名字,可在其它 Shell 函数中使用  
  16.         LPCTSTR         lpszProgressTitle; // 只在 FOF_SIMPLEPROGRESS 时,指定对话框的标题。  
  17. } SHFILEOPSTRUCT, FAR *LPSHFILEOPSTRUCT;  
  18. wFunc 可以为:  
  19. /FO_MOVE          0x0001 移动文件  
  20. FO_COPY           0x0002 复制文件  
  21. FO_DELETE         0x0003 删除文件,只使用 pFrom  
  22. FO_RENAME         0x0004 文件重命名  
  23. fFlags可以为:  
  24. FOF_MULTIDESTFILES         0x0001 //pTo 指定了多个目标文件,而不是单个目录  
  25. FOF_CONFIRMMOUSE           0x0002  //Not used.
  26. FOF_SILENT                 0x00044 // 不显示一个进度对话框  
  27. FOF_RENAMEONCOLLISION      0x0008 // 碰到有抵触的名字时,自动分配前缀  
  28. FOF_NOCONFIRMATION         0x0010 // 不对用户显示提示  
  29. FOF_WANTMAPPINGHANDLE      0x0020 // 填充 hNameMappings 字段,必须使用 SHFreeNameMappings 释放  
  30. FOF_ALLOWUNDO              0x0040 // 允许撤销  
  31. FOF_FILESONLY              0x0080 // 执行通配符,使用 *.* 时, 只对文件操作  
  32. FOF_SIMPLEPROGRESS         0x0100 // 简单进度条,意味者不显示文件名。  
  33. FOF_NOCONFIRMMKDIR         0x0200 // 建新目录时不需要用户确定  
  34. FOF_NOERRORUI              0x0400 // 不显示出错用户界面  
  35. FOF_NOCOPYSECURITYATTRIBS 0x0800 // 不复制 NT 文件的安全属性  
  36. FOF_NORECURSION            0x1000 // 不递归目录  
  37. 返回值:  
  38. 函数成功返回 0 ,失败返回非 0 。  
  39.   注意:
  40. 1.pFrom和pTo最好以\0\0结尾(把存放路径的字符串初始化为0),不然有可能会出错
  41. 2.SHFileOperation能操作网络上的文件 如果你想将本地文件复制到192.168.1.99 那么只要在192.168.1.99上共享123目录 然后将pTo设置为\\192.168.1.99\123 就可以了 但不要设置为\\192.168.1.99
  42. 例子:  
  43. 1. 将 C:\Test.txt 拷贝到 D:\  
  44.    SHFILEOPSTRUCT lpsh;  
  45.    ZeroMemory(&lpsh,sizeof(lpsh));  
  46.    lpsh.hwnd= HWND_DESKTOP;  
  47.    lpsh.fFlags=FOF_NOCONFIRMATION|FOF_SIMPLEPROGRESS ;  
  48.    lpsh.wFunc=FO_COPY; // FO_MOVE 则是移动  
  49.    lpsh.pFrom= "C:\Test.txt";    
  50.    lpsh.pTo = "D:\"  
  51.    if( 0 != SHFileOperation(&lpsh))  
  52.    {  
  53.       AfxMessageBox("复制文件出错,请检查");  
  54.       return ;  
  55.    }  
  56. 2. 删除 D:\Test.txt  
  57.    SHFILEOPSTRUCT lpsh;  
  58.    ZeroMemory(&lpsh,sizeof(lpsh));  
  59.    lpsh.hwnd= HWND_DESKTOP;  
  60.    lpsh.fFlags=FOF_NOCONFIRMATION|FOF_SIMPLEPROGRESS ;  
  61.    lpsh.wFunc=FO_DELETE;  
  62.    lpsh.pFrom= "D:\Test.txt";    
  63.    if( 0 != SHFileOperation(&lpsh))  
  64.    {  
  65.       AfxMessageBox("删除文件出错,请检查");  
  66.       return ;  
  67.    }  
  68. 3.重命名  
  69.    SHFILEOPSTRUCT lpsh;  
  70.    ZeroMemory(&lpsh,sizeof(lpsh));  
  71.    lpsh.hwnd= HWND_DESKTOP;  
  72.    lpsh.fFlags=FOF_NOCONFIRMATION|FOF_SIMPLEPROGRESS ;  
  73.    lpsh.wFunc=FO_RENAME;  
  74.    lpsh.pFrom= "D:\Test.txt";    
  75.    lpsh.pTo = "D:\Test2.txt";  
  76.    if( 0 != SHFileOperation(&lpsh))  
  77.    {  
  78.       AfxMessageBox("重命名文件出错!");  
  79.       return ;  
  80.    }  
  1. SHFILEOPSTRUCT Op;  
  2. ZeroMemory(&Op, sizeof(Op));  
  3. TCHAR ToBuf[MAX_PATH];  
  4. TCHAR FromBuf[MAX_PATH];  
  5. ZeroMemory(ToBuf, sizeof(ToBuf));  
  6. ZeroMemory(FromBuf, sizeof(FromBuf));  
  7. lstrcpy(FromBuf, strDeleteFile);  
  8. Op.hwnd = NULL;  
  9. Op.pFrom = FromBuf;  
  10. Op.pTo = ToBuf;  
  11. Op.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI;  
  12. Op.fAnyOperationsAborted = FALSE;  
  13. Op.hNameMappings = NULL;  
  14. Op.lpszProgressTitle = NULL;  
  15. Op.wFunc = FO_DELETE;  
  16. SHFileOperation(&Op);