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


  1. SHFileOperation  
  2.   
  3.   
  4.   
  5. 函数功能描述:文件操作,与 Shell 的动作相同.  
  6.  
  7. 函数原型:  
  8.  
  9. #include<shellapi.h>  
  10.   
  11. WINSHELLAPI int WINAPI SHFileOperation(LPSHFILEOPSTRUCT lpFileOp);  
  12.   
  13.   
  14.   
  15. 参数:  
  16.   
  17. typedef struct _SHFILEOPSTRUCT  
  18.   
  19. {  
  20.   
  21.         HWND            hwnd;   //父窗口句柄  
  22.   
  23.         UINT            wFunc; //要执行的动作  
  24.   
  25.         LPCTSTR         pFrom; //源文件路径,可以是多个文件  
  26.   
  27.         LPCTSTR         pTo;    //目标路径,可以是路径或文件名  
  28.   
  29.         FILEOP_FLAGS    fFlags; //标志,附加选项  
  30.   
  31.         BOOL            fAnyOperationsAborted; //是否可被中断  
  32.   
  33.         LPVOID          hNameMappings;         //文件映射名字,可在其它 Shell 函数中使用  
  34.   
  35.         LPCTSTR         lpszProgressTitle; // 只在 FOF_SIMPLEPROGRESS 时,指定对话框的标题。  
  36.   
  37. } SHFILEOPSTRUCT, FAR *LPSHFILEOPSTRUCT;  

  38. wFunc 可以为:  
  39.   
  40. /FO_MOVE          0x0001 移动文件  
  41.   
  42. FO_COPY           0x0002 复制文件  
  43.   
  44. FO_DELETE         0x0003 删除文件,只使用 pFrom  
  45.   
  46. FO_RENAME         0x0004 文件重命名  
  47.   
  48.   
  49.   
  50. fFlags可以为:  
  51.   
  52. FOF_MULTIDESTFILES         0x0001 //pTo 指定了多个目标文件,而不是单个目录  
  53.   
  54. FOF_CONFIRMMOUSE           0x0002  //Not used.
  55.   
  56. FOF_SILENT                 0x00044 // 不显示一个进度对话框  
  57.   
  58. FOF_RENAMEONCOLLISION      0x0008 // 碰到有抵触的名字时,自动分配前缀  
  59.   
  60. FOF_NOCONFIRMATION         0x0010 // 不对用户显示提示  
  61.   
  62. FOF_WANTMAPPINGHANDLE      0x0020 // 填充 hNameMappings 字段,必须使用 SHFreeNameMappings 释放  
  63.   
  64. FOF_ALLOWUNDO              0x0040 // 允许撤销  
  65.   
  66. FOF_FILESONLY              0x0080 // 执行通配符,使用 *.* 时, 只对文件操作  
  67.   
  68. FOF_SIMPLEPROGRESS         0x0100 // 简单进度条,意味者不显示文件名。  
  69.   
  70. FOF_NOCONFIRMMKDIR         0x0200 // 建新目录时不需要用户确定  
  71.   
  72. FOF_NOERRORUI              0x0400 // 不显示出错用户界面  
  73.   
  74. FOF_NOCOPYSECURITYATTRIBS 0x0800 // 不复制 NT 文件的安全属性  
  75.   
  76. FOF_NORECURSION            0x1000 // 不递归目录  
  77.   
  78.   
  79.   
  80. 返回值:  
  81.   
  82. 函数成功返回 0 ,失败返回非 0 。  
  83.   
  84.   
  85.   注意:
  86. 1.pFrom和pTo最好以\0\0结尾(把存放路径的字符串初始化为0),不然有可能会出错
  87. 2.SHFileOperation能操作网络上的文件 如果你想将本地文件复制到192.168.1.99 那么只要在192.168.1.99上共享123目录 然后将pTo设置为\\192.168.1.99\123 就可以了 但不要设置为\\192.168.1.99
  88.   
  89. 例子:  
  90.   
  91. 1. 将 C:\Test.txt 拷贝到 D:\  
  92.   
  93.   
  94.   
  95.    SHFILEOPSTRUCT lpsh;  
  96.   
  97.    ZeroMemory(&lpsh,sizeof(lpsh));  
  98.   
  99.    lpsh.hwnd= HWND_DESKTOP;  
  100.   
  101.    lpsh.fFlags=FOF_NOCONFIRMATION|FOF_SIMPLEPROGRESS ;  
  102.   
  103.    lpsh.wFunc=FO_COPY; // FO_MOVE 则是移动  
  104.   
  105.    lpsh.pFrom= "C:\Test.txt";    
  106.   
  107.    lpsh.pTo = "D:\"  
  108.   
  109.    if( 0 != SHFileOperation(&lpsh))  
  110.   
  111.    {  
  112.   
  113.       AfxMessageBox("复制文件出错,请检查");  
  114.   
  115.       return ;  
  116.   
  117.    }  
  118.   
  119.   
  120.   
  121. 2. 删除 D:\Test.txt  
  122.   
  123.    SHFILEOPSTRUCT lpsh;  
  124.   
  125.    ZeroMemory(&lpsh,sizeof(lpsh));  
  126.   
  127.    lpsh.hwnd= HWND_DESKTOP;  
  128.   
  129.    lpsh.fFlags=FOF_NOCONFIRMATION|FOF_SIMPLEPROGRESS ;  
  130.   
  131.    lpsh.wFunc=FO_DELETE;  
  132.   
  133.    lpsh.pFrom= "D:\Test.txt";    
  134.   
  135.    if( 0 != SHFileOperation(&lpsh))  
  136.   
  137.    {  
  138.   
  139.       AfxMessageBox("删除文件出错,请检查");  
  140.   
  141.       return ;  
  142.   
  143.    }  
  144.   
  145.   
  146.   
  147. 3.重命名  
  148.   
  149.    SHFILEOPSTRUCT lpsh;  
  150.   
  151.    ZeroMemory(&lpsh,sizeof(lpsh));  
  152.   
  153.    lpsh.hwnd= HWND_DESKTOP;  
  154.   
  155.    lpsh.fFlags=FOF_NOCONFIRMATION|FOF_SIMPLEPROGRESS ;  
  156.   
  157.    lpsh.wFunc=FO_RENAME;  
  158.   
  159.    lpsh.pFrom= "D:\Test.txt";    
  160.   
  161.    lpsh.pTo = "D:\Test2.txt";  
  162.   
  163.    if( 0 != SHFileOperation(&lpsh))  
  164.   
  165.    {  
  166.   
  167.       AfxMessageBox("重命名文件出错!");  
  168.   
  169.       return ;  
  170.   
  171.    }  
  172.   
  173.   
  174.   
  175.   
  176.   

  1.   
  2. SHFILEOPSTRUCT Op;  
  3.   
  4. ZeroMemory(&Op, sizeof(Op));  
  5.   
  6.   
  7.   
  8. TCHAR ToBuf[MAX_PATH];  
  9.   
  10. TCHAR FromBuf[MAX_PATH];  
  11.   
  12. ZeroMemory(ToBuf, sizeof(ToBuf));  
  13.   
  14. ZeroMemory(FromBuf, sizeof(FromBuf));  
  15.   
  16. lstrcpy(FromBuf, strDeleteFile);  
  17.   
  18.   
  19.   
  20. Op.hwnd = NULL;  
  21.   
  22. Op.pFrom = FromBuf;  
  23.   
  24. Op.pTo = ToBuf;  
  25.   
  26. Op.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI;  
  27.   
  28. Op.fAnyOperationsAborted = FALSE;  
  29.   
  30. Op.hNameMappings = NULL;  
  31.   
  32. Op.lpszProgressTitle = NULL;  
  33.   
  34. Op.wFunc = FO_DELETE;  
  35.   
  36.   
  37.   
  38. SHFileOperation(&Op); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值