DeleteFile (kernel32.dll) 与 DeleteItem (shell32.dll)
DeleteFile (kernel32.dll) vs DeleteItem (shell32.dll)
这两个函数有什么区别?
DeleteFile 是 WinAPI 的较旧组件,通常在较旧的系统中更受支持。
IFileOperation::DeleteItem 是一种较新的方法(可能在下游调用 DeleteFile),用于与不同于标准 WinAPI 的 API 生态系统集成。
IFileOperation 基础比 DeleteFile(更像是一个 "atomic" 操作)具有更大的灵活性和面向对象的设计。在删除文件方面,它们在行为上基本相同。
IFileOperation::DeleteItem 允许您提供有关操作的反馈和进度。 DeleteFile 不提供任何反馈,仅提供操作结果。
DeleteFile
是一个低级函数,仅删除 Windows 支持的文件系统和文件共享上的文件。
IFileOperation::DeleteItem
删除 shell namespace 中的项目。
DeleteItem 理论上可用于删除控制面板项目,ftp files/folders 和位于 shell 命名空间中并设置了 SFGAO_CANDELETE
的任何其他项目。如果传递给 DeleteItem 的 IShellItem
是普通文件系统上的文件,那么 DeleteFile
最终将用于删除该文件。
shell 命名空间模型自 Windows 95 年以来就存在(IShellFolder
和朋友们),但 IFileOperation 仅存在于 Vista 及更高版本中,并且是新 shell 的一部分添加到这些系统的复制引擎。
这两个函数有什么区别?
DeleteFile 是 WinAPI 的较旧组件,通常在较旧的系统中更受支持。
IFileOperation::DeleteItem 是一种较新的方法(可能在下游调用 DeleteFile),用于与不同于标准 WinAPI 的 API 生态系统集成。
IFileOperation 基础比 DeleteFile(更像是一个 "atomic" 操作)具有更大的灵活性和面向对象的设计。在删除文件方面,它们在行为上基本相同。
IFileOperation::DeleteItem 允许您提供有关操作的反馈和进度。 DeleteFile 不提供任何反馈,仅提供操作结果。
DeleteFile
是一个低级函数,仅删除 Windows 支持的文件系统和文件共享上的文件。IFileOperation::DeleteItem
删除 shell namespace 中的项目。
DeleteItem 理论上可用于删除控制面板项目,ftp files/folders 和位于 shell 命名空间中并设置了 SFGAO_CANDELETE
的任何其他项目。如果传递给 DeleteItem 的 IShellItem
是普通文件系统上的文件,那么 DeleteFile
最终将用于删除该文件。
shell 命名空间模型自 Windows 95 年以来就存在(IShellFolder
和朋友们),但 IFileOperation 仅存在于 Vista 及更高版本中,并且是新 shell 的一部分添加到这些系统的复制引擎。