函数ShFileOperation对文件的操作与注意事项 1. SHFileOperation 2.
3. 函数功能描述:文件操作,与 Shell 的动作相同. 4.
5. 函数原型:
6. #include 8. WINSHELLAPI 9. 10. 11. 12. 参数: 13. 14. typedef struct _SHFILEOPSTRUCT 15. 16. { 17. 18. HWND hwnd; //父窗口句柄 19. 20. UINT wFunc; //要执行的动作 21. 22. LPCTSTR pFrom; //源文件路径,可以是多个文件 23. 24. LPCTSTR pTo; //目标路径,可以是路径或文件名 25. 26. FILEOP_FLAGS fFlags; //标志,附加选项 int WINAPI SHFileOperation(LPSHFILEOPSTRUCT lpFileOp); 27. 28. BOOL fAnyOperationsAborted; //是否可被中断 29. 30. LPVOID hNameMappings; //文件映射名字,可在其它 Shell 函数中使用 31. 32. LPCTSTR 33. 34. } SHFILEOPSTRUCT, FAR *LPSHFILEOPSTRUCT; 35. 36. 37. ======================= 38. 39. wFunc 可以为: 40. 41. /FO_MOVE 0x0001 移动文件 42. 43. FO_COPY 0x0002 复制文件 44. 45. FO_DELETE 0x0003 删除文件,只使用 pFrom 46. 47. FO_RENAME 0x0004 文件重命名 48. 49. 50. 51. fFlags可以为: 52. 53. FOF_MULTIDESTFILES 0x0001 //pTo 指定了多个目 lpszProgressTitle; // 只 在 FOF_SIMPLEPROGRESS 时,指定对话框的标题。 标文件,而不是单个目录 . 55. FOF_CONFIRMMOUSE 0x0002 56. 57. FOF_SILENT 0x00044 // 不显示一个进度对话框 58. 59. FOF_RENAMEONCOLLISION 0x0008 // 碰到有抵触的名字时,自动分配前缀 60. 61. FOF_NOCONFIRMATION 0x0010 // 不对用户显示提示 62. 63. FOF_WANTMAPPINGHANDLE 0x0020 // 填充 hNameMappings 字段,必须使用 SHFreeNameMappings 释放 . 65. FOF_ALLOWUNDO 0x0040 // 允许撤销 66. 67. FOF_FILESONLY 0x0080 // 使用 *.* 时, 只对文件操作 68. 69. FOF_SIMPLEPROGRESS 0x0100 // 简单进度条,意味者不显示文件名。 70. 71. FOF_NOCONFIRMMKDIR 0x0200 // 建新目录时不需要用户确定 72. 73. FOF_NOERRORUI 0x0400 // 不显示出错用户界面 74. 75. FOF_NOCOPYSECURITYATTRIBS 0x0800 // 不复制 NT 文件的安全属性 76. 77. FOF_NORECURSION 0x1000 // 不递归目录 78. 79. 80. 81. 返回值: 82. 83. 函数成功返回 0 ,失败返回非 0 。 84. 85. 86. 87. 88. . 例子: 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; 1. 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)) 1. 165. { 166. 167. AfxMessageBox(\"重命名文件出错!\"); 168. 169. return ; 170. 171. } 172. 173. 注意事项: 174. 参数pTo、pFrom必须是以 双0 结束的,原文为: 175. pFrom 176. 177. Pointer to a buffer that specifies one or more source file names. Multiple names must be null-separated. The list of names must be double null-terminated. 178. 179. a.如果是直接赋值: 180. WCHAR strSrc[MAX_PATH] = _T(\"g:\\\\123\"); 181. WCHAR strDst[MAX_PATH] = _T(\"g:\\\\456\"); 182. 这样就可以成功编译。 183. 184. b.如果pTo、pFrom从CString获得,则: 185. WCHAR SrcFolder[MAX_PATH],DestFolder[MAX_PATH]; 186. wcscpy_s(SrcFolder, Source); 187. wcscpy_s(DestFolder,m_Path); 188. SrcFolder[wcslen(SrcFolder) + 1] = 0; 1. DestFolder[wcslen(DestFolder) + 1] = 0;(其中,Source与m_Path是在其他地方获取的值) 190. 191. 造成这种差异的原因是:CString在结尾并没有\"\\0\",所以需要我们添加。 192. 193. 194. 4.VB 195. 196. 197. 198. Public \"shell32.dll\" 199. 200. Public Const FO_COPY = &H2 201. 202. Public Const FOF_ALLOWUNDO = &H40 203. 204. 205. 206. Public Sub ShellCopyFile(Source As String, Dest As String) 207. 208. Dim result As Long 209. 210. Dim fileop As SHFILEOPSTRUCT 211. 212. With fileop 213. Declare Function SHFileOperation (lpFileOp Lib As Alias \"SHFileOperationA\" SHFILEOPSTRUCT) As Long 214. .hwnd = 0 215. 216. .wFunc = FO_COPY 217. 218. .pFrom = Source & vbNullChar & vbNullChar 219. 220. .pTo = Dest & vbNullChar & vbNullChar 221. 222. .fFlags = FOF_ALLOWUNDO 223. 224. End With 225. 226. 227. 228. result = SHFileOperation(fileop) 229. 230. 231. 232. If result <> 0 Then 233. 234. 'Msgbox the error that occurred in the API. 235. 236. MsgBox Err.LastDllError, vbCritical Or vbOKOnly 237. 238. Else 239. 240. If fileop.fAnyOperationsAborted <> 0 Then 241. 242. MsgBox \"Operation Failed\243. 244. End If 245. 246. End If 247. 248. End Sub view plaincopy to clipboardprint? 1. 单开一个内存,清空,把pForm指向这里,把内容拷进去 2. 3. 4. 5. SHFILEOPSTRUCT Op; 6. 7. ZeroMemory(&Op, sizeof(Op)); 8. 9. 10. 11. TCHAR ToBuf[MAX_PATH]; 12. 13. TCHAR FromBuf[MAX_PATH]; 14. 15. ZeroMemory(ToBuf, sizeof(ToBuf)); 16. 17. ZeroMemory(FromBuf, sizeof(FromBuf)); 18. 19. lstrcpy(FromBuf, strDeleteFile); 20. 21. 22. 23. Op.hwnd = NULL; 24. 25. Op.pFrom = FromBuf; 26. 27. Op.pTo = ToBuf; 28. 29. Op.fFlags 30. 31. Op.fAnyOperationsAborted = FALSE; 32. 33. Op.hNameMappings = NULL; 34. 35. Op.lpszProgressTitle = NULL; 36. 37. Op.wFunc = FO_DELETE; 38. 39. 40. 41. SHFileOperation(&Op); 42. 43. =================== 44. 45. vb.net 46. 47. Public Structure SHFILEOPSTRUCT 48. 49. Dim hwnd As IntPtr 50. 51. Dim wFunc As Integer 52. 53. Dim pFrom As String = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI; . 55. Dim pTo As String 56. 57. Dim fFlags As Short 58. 59. Dim fAnyOperationsAborted As Integer 60. 61. Dim hNameMappings As IntPtr 62. 63. Dim lpszProgressTitle As String . 65. End Structure 66. 67. 68. 69. Public Declare Function SHFileOperation \"shell32.dll\" Alias \"SHFileOperationA\" (ByRef lpFileOp SHFILEOPSTRUCT) As Integer 70. 71. 72. 73. ====================== 74. 75. vb: 76. 77. Type SHFILEOPSTRUCT 78. 79. hWnd As Long 80. 81. wFunc As Long Lib As 82. 83. pFrom As String '必须用 pFrom & vbNullChar & vbNullChar 84. 85. pTo As String '同pFrom 86. 87. fFlags As Integer 88. . fAnyOperationsAborted As Boolean 90. 91. hNameMappings As Long 92. 93. lpszProgressTitle As String 94. 95. End Type 96. 97. Public Declare Function SHFileOperation \"shell32.dll\" Alias \"SHFileOperationA\" (lpFileOp SHFILEOPSTRUCT) As Long Lib As 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务