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 的一部分添加到这些系统的复制引擎。