回答
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. Android NDK LoadLibrary(“KERNEL32.DLL”)
- 2. VBA - 替代使用Shell32.dll
- 3. 无法找到SHCreateItemFromParsingName(SHELL32.DLL)
- 4. P/Invoke for shell32.dll的SHMultiFileProperties
- 5. kernel32.dll符号链接
- 6. VS2008调试器和kernel32.dll
- 7. System.EntryPointNotFoundException和的DllImport( “KERNEL32.DLL”)
- 8. 如何创建一个dll,如包含图标的shell32.dll
- 9. 如何从shell32.dll中获取图标?
- 10. Delphi 2009造成shell32.dll错误?
- 11. 缺少kernel32.dll的依赖关系
- 12. 什么是Kernel32.dll的Linux等价物?
- 13. KERNEL32.DLL睡眠和Thread.sleep()方法
- 14. 在KERNEL32.dll中找不到FlsAlloc?
- 15. C++挂钩kernel32.dll中OpenProcess与弯路
- 16. 问题只在Vista(.net):调用非托管dll(Shell32.dll,函数:SHEmptyRecycleBin)线程
- 17. DllImport user32 vs user32.dll
- 18. 使用[user32.dll]和[kernel32.dll]在MQL4中打开离线图表Win-API调用
- 19. 从现有的外部.dll调用方法。对于ex,kernel32.dll中的CopyFileA
- 20. 32位和64位DLL如何链接到相同的C:\ system32 \ kernel32.DLL?
- 21. 为什么我们需要在Windows C++中链接kernel32.dll,user32.dll等...?
- 22. 如何使用shell32.dll中从C++控制台应用程序
- 23. 删除由shell32.dll创建的gdi对象 - > ExtractIconEx
- 24. 无法在.Net 4.0项目中使用Shell32.dll
- 25. 在自定义操作中使用Shell32.dll SHGetFolderPath函数Wix
- 26. SendMessage vs SendNotifyMessage user32.dll api
- 27. VS C++ 6.0与SQLite * .dll
- 28. WSDL vs DLL。哪个更好?
- 29. 如何在WinRT 8.1上P /调用kernel32.dll
- 30. 托管.NET等同于WinBase中的CreateFile和WriteFile(kernel32.dll)
外壳通常看起来重复功能。除批量能力外,获取进度反馈并将其删除到回收站,更大的区别在于该项目不必是文件。谷歌搜索“shell命名空间扩展”可能会有所帮助。 –