回答
DeleteFile
是一个低级函数,它只能删除Windows支持的文件系统和文件共享上的文件。IFileOperation::DeleteItem
删除shell namespace中的项目。
DeleteItem在理论上可以用来删除控制面板项目,FTP文件/文件夹和其他任何生活在外壳命名空间并具有SFGAO_CANDELETE
集。如果传递给DeleteItem的IShellItem
是普通文件系统上的文件,则最终将使用DeleteFile
删除该文件。
shell命名空间模型自Windows 95(IShellFolder
和朋友)以来一直存在,但IFileOperation仅存在于Vista和更高版本中,并且是添加到这些系统的新shell复制引擎的一部分。
'IFileOperation'将递归地删除一个文件系统目录,该文件系统目录在Windows API中需要通过FindFirstFile,FindNextFile和使用DeleteFile删除文件以及使用RemoveDirectory删除目录(仔细重试反恶意软件扫描程序通过保持自己的手柄打开扫描文件来添加异步延迟)。 'IFileOperation'也默认使用回收站(如果可能的话,基于路径长度),资源管理器的撤消操作以及错误对话框,包括在必要时请求UAC提升。 – eryksun
的DeleteFile是WinAPI的较旧部件,并且通常更跨旧的系统支持。
IFileOperation :: DeleteItem是一个较新的方法(可能调用下游的DeleteFile),用于与标准WinAPI不同的API生态系统进行集成。
IFileOperation基础比DeleteFile(它更像是一个“原子”操作)具有更大的灵活性和面向对象的设计。就删除文件而言,它们在行为上基本相同。
这也是[SHFileOperation](https://msdn.microsoft.com/en-us/library/windows/desktop/bb762164(v = vs.85).aspx)... – xMRi
IFileOperation :: DeleteItem允许您提供操作的反馈和进度。而DeleteFile不提供任何反馈,只是操作的结果。
'IFileOperation ::当调用单个文件时,DeleteItem'不能提供更多的反馈(与'DeleteFile'比较)。这里没有任何进展 - 因为删除文件是同步api。 – RbMm
- 1. ARM中是否支持kernel32.dll和shell32.dll?
- 2. Kernel32.dll头信息
- 3. Android NDK LoadLibrary(“KERNEL32.DLL”)
- 4. 找不到PInvoke DLL kernel32.dll文件C#
- 5. P/Invoke for shell32.dll的SHMultiFileProperties
- 6. VBA - 替代使用Shell32.dll
- 7. 无法找到SHCreateItemFromParsingName(SHELL32.DLL)
- 8. .NET mscorlib.dll和Kernel32.dll关系
- 9. kernel32.dll符号链接
- 10. System.EntryPointNotFoundException和的DllImport( “KERNEL32.DLL”)
- 11. PyTables/HDF5 KERNEL32.dll错误
- 12. VS2008调试器和kernel32.dll
- 13. QT中缺少Kernel32.dll
- 14. 如何创建一个dll,如包含图标的shell32.dll
- 15. 引用Shell32.dll并编译为x64?
- 16. 如何从shell32.dll中获取图标?
- 17. 的P/Invoke与SHELL32,旁路Interop.Shell32.dll代
- 18. Delphi 2009造成shell32.dll错误?
- 19. 如何图标从Shell32.dll中
- 20. Shell32.dll参考导致问题
- 21. opencv dll错误 - 找不到过程KERNEL32.dll中的过程LoadPackagedLibrary
- 22. CreateToolhelp32Snapshot找不到kernel32.dll错误信息
- 23. 缺少kernel32.dll的依赖关系
- 24. 在WriteFile kernel32.dll上检测到PInvokeStackImbalance
- 25. KERNEL32.DLL睡眠和Thread.sleep()方法
- 26. 什么是Kernel32.dll的Linux等价物?
- 27. C++挂钩kernel32.dll中OpenProcess与弯路
- 28. 如何在Java中使用kernel32.dll
- 29. 普通的dll vs扩展dll
- 30. 问题只在Vista(.net):调用非托管dll(Shell32.dll,函数:SHEmptyRecycleBin)线程
外壳通常看起来重复功能。除批量能力外,获取进度反馈并将其删除到回收站,更大的区别在于该项目不必是文件。谷歌搜索“shell命名空间扩展”可能会有所帮助。 –