В чем разница между двумя функциями?
DeleteFile
это низкоуровневая функция, которая удаляет файлы только в файловых системах и общих файловых ресурсах, поддерживаемых Windows.
IFileOperation::DeleteItem
удаляет элементы в пространство имен оболочки.
DeleteItem теоретически может использоваться для удаления элементов панели управления, файлов / папок ftp и всего остального, что находится в пространстве имен оболочки и имеет SFGAO_CANDELETE
задавать. Если IShellItem
передается в DeleteItem файл в обычной файловой системе, то DeleteFile
в конечном итоге будет использоваться для удаления файла.
Модель пространства имен оболочки существует со времен Windows 95 (IShellFolder
и друзья), но IFileOperation существует только в Vista и более поздних версиях и является частью нового механизма копирования оболочки, добавленного в эти системы.
DeleteFile является более старым компонентом WinAPI и, как правило, больше поддерживается в старых системах.
IFileOperation :: DeleteItem — более новый метод (возможно, вызывающий DeleteFile в нисходящем направлении), используемый для интеграции с другой экосистемой API, чем стандартный WinAPI.
База IFileOperation обладает большей гибкостью и объектно-ориентированным дизайном, чем DeleteFile (что является скорее «атомарной» операцией). С точки зрения удаления файла, они по сути поведенческие.
IFileOperation :: DeleteItem Позволяет дать отзыв и ход выполнения операции. Пока DeleteFile не дает обратной связи, только результат операции.