FileAndFolderClass.cpp 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #pragma once
  2. #include "stdafx.h"
  3. #include "FileAndFolderClass.h"
  4. /*
  5. 能产生对话框的标志:
  6. FOF_SILENT //progress dialog
  7. FOF_RENAMEONCOLLISION //replace dialog
  8. FOF_NOCONFIRMATION //confirmation dialog
  9. FOF_NOCONFIRMMKDIR //asks for your permission to create a new folder
  10. FOF_NOERRORUI //error message
  11. FOF_ALLOWUNDO //允许放回回收站,一般这个最好做默认
  12. FOF_NOCONFIRMATION //不出现确认对话框(当需要覆盖时)
  13. FOF_SILENT //不显示进度对话框
  14. FOF_NOERRORUI //No user interface will be displayed if an error occurs.
  15. FOF_NOCONFIRMMKDIR //如果目的目录不存在,就默认创建,不需确认
  16. FOF_RENAMEONCOLLISION //如果文件(夹)已存在,自动为其添加序列号修改文件名。此时不会出现确认对话框
  17. FOF_MULTIDESTFILES //把文件夹里的所有内容复制到FileOp.pTo指定的文件夹里,而不是直接复制一个文件夹
  18. FOF_SIMPLEPROGRESS //Displays a progress dialog box but does not show the file names
  19. FOF_CONFIRMMOUSE //Not currently implemented.
  20. FOF_FILESONLY: //执行通配符,只执行文件;
  21. FOF_WANTMAPPINGHANDLE: //要求SHFileOperation()函数返回正处于操作状态的实际文件列表,文件列表
  22. 名柄保存在hNameMappings成员中。SHFILEOPSTRUCT结构还包含一个SHNAMEMAPPING结构的数组,此数组
  23. 保存由SHELL计算的每个处于操作状态的文件的新旧路径。
  24. 说明:
  25. 1.以下封装了4个函数_CopyFile,_DeleteFile,_MoveFile,_ReNameFile
  26. 2.每个函数都先拷贝了原来的路径,保证了路径是以2个\0\0结尾。(如果不以2个\0\0结尾,往往会出错)
  27. 3.对于文件或文件夹都适用
  28. */
  29. /****************************************************************************
  30. 复制文件或者文件夹,需要把路径添加2个\0\0
  31. ****************************************************************************/
  32. bool _CopyFile(const TCHAR *_pFrom,const TCHAR *_pTo,WORD flags)
  33. {
  34. TCHAR pTo[MAX_PATH]={0}; _tcscpy(pTo,_pTo);
  35. TCHAR pFrom[MAX_PATH]={0}; _tcscpy(pFrom,_pFrom);
  36. SHFILEOPSTRUCT FileOp={0};
  37. FileOp.fFlags= flags;
  38. FileOp.pFrom = pFrom;
  39. FileOp.pTo = pTo;
  40. FileOp.wFunc = FO_COPY;
  41. return SHFileOperation(&FileOp) == 0;
  42. }
  43. /****************************************************************************
  44. 删除文件或者文件夹,需要把路径添加2个\0\0
  45. ****************************************************************************/
  46. bool _DeleteFile(const TCHAR* _pFrom,WORD flags)
  47. {
  48. TCHAR pFrom[MAX_PATH]={0}; _tcscpy(pFrom,_pFrom);
  49. SHFILEOPSTRUCT FileOp={0};
  50. FileOp.pFrom = pFrom;
  51. FileOp.pTo = NULL; //一定要是NULL
  52. FileOp.fFlags= flags;
  53. FileOp.wFunc = FO_DELETE; //删除操作
  54. return SHFileOperation(&FileOp) == 0;
  55. }
  56. /****************************************************************************
  57. 移动文件或者文件夹,需要把路径添加2个\0\0
  58. ****************************************************************************/
  59. bool _MoveFile(const TCHAR *_pFrom,const TCHAR *_pTo,WORD flags)
  60. {
  61. TCHAR pTo[MAX_PATH]={0}; _tcscpy(pTo,_pTo);
  62. TCHAR pFrom[MAX_PATH]={0}; _tcscpy(pFrom,_pFrom);
  63. SHFILEOPSTRUCT FileOp={0};
  64. FileOp.fFlags= flags;
  65. FileOp.pFrom = pFrom;
  66. FileOp.pTo = pTo;
  67. FileOp.wFunc = FO_MOVE;
  68. return SHFileOperation(&FileOp) == 0;
  69. }
  70. /****************************************************************************
  71. 重命名文件或者文件夹
  72. 可以的话用 rename(buf,TempFilePath) (文件和文件夹都可以) because不需要把路径添加2个\0\0
  73. ****************************************************************************/
  74. bool _ReNameFile(const TCHAR *_pFrom,const TCHAR *_pTo,WORD flags)
  75. {
  76. TCHAR pTo[MAX_PATH]={0}; _tcscpy(pTo,_pTo);
  77. TCHAR pFrom[MAX_PATH]={0}; _tcscpy(pFrom,_pFrom);
  78. SHFILEOPSTRUCT FileOp={0};
  79. FileOp.fFlags = flags;
  80. FileOp.pFrom = pFrom;
  81. FileOp.pTo = pTo;
  82. FileOp.wFunc = FO_RENAME;
  83. return SHFileOperation(&FileOp) == 0;
  84. }