2017-10-16 107 views

回答

1
  • DeleteFile是一个低级函数,它只能删除Windows支持的文件系统和文件共享上的文件。

  • IFileOperation::DeleteItem删除shell namespace中的项目。

DeleteItem在理论上可以用来删除控制面板项目,FTP文件/文件夹和其他任何生活​​在外壳命名空间并具有SFGAO_CANDELETE集。如果传递给DeleteItem的IShellItem是普通文件系统上的文件,则最终将使用DeleteFile删除该文件。

shell命名空间模型自Windows 95(IShellFolder和朋友)以来一直存在,但IFileOperation仅存在于Vista和更高版本中,并且是添加到这些系统的新shell复制引擎的一部分。

+0

'IFileOperation'将递归地删除一个文件系统目录,该文件系统目录在Windows API中需要通过FindFirstFile,FindNextFile和使用DeleteFile删除文件以及使用RemoveDirectory删除目录(仔细重试反恶意软件扫描程序通过保持自己的手柄打开扫描文件来添加异步延迟)。 'IFileOperation'也默认使用回收站(如果可能的话,基于路径长度),资源管理器的撤消操作以及错误对话框,包括在必要时请求UAC提升。 – eryksun

0

的DeleteFile是WinAPI的较旧部件,并且通常更跨旧的系统支持。

IFileOperation :: DeleteItem是一个较新的方法(可能调用下游的DeleteFile),用于与标准WinAPI不同的API生态系统进行集成。

IFileOperation基础比DeleteFile(它更像是一个“原子”操作)具有更大的灵活性和面向对象的设计。就删除文件而言,它们在行为上基本相同。

+0

这也是[SHFileOperation](https://msdn.microsoft.com/en-us/library/windows/desktop/bb762164(v = vs.85).aspx)... – xMRi

0

IFileOperation :: DeleteItem允许您提供操作的反馈和进度。而DeleteFile不提供任何反馈,只是操作的结果。

+0

'IFileOperation ::当调用单个文件时,DeleteItem'不能提供更多的反馈(与'DeleteFile'比较)。这里没有任何进展 - 因为删除文件是同步api。 – RbMm

相关问题