2017-10-16 9 views
-1

2つの機能の違いは何ですか?DeleteFile(kernel32.dll)とDeleteItem(shell32.dll)

+1

シェルは、外見上、機能を重複していることがよくあります。バッチ処理の機能を超えて、進捗のフィードバックを得てごみ箱に削除するより大きな違いは、アイテムがファイルである必要はないということです。 Googleシェルネームスペースの拡張機能が役立つかもしれません。 –

答えて

1
  • DeleteFileはWindowsのみでサポートされているファイルシステムとファイル共有上のファイルを削除し、低レベルの関数です。

  • IFileOperation::DeleteItemは、shell namespaceの項目を削除します。

DeleteItemは、理論的には、コントロールパネルの項目、FTPファイル/フォルダとシェル名前空間に住んでいるとSFGAO_CANDELETEセットを持って何かを削除するために使用することができます。 IShellItemがDeleteItemに渡されたファイルが通常のファイルシステム上のファイルである場合、最終的にファイルを削除するにはDeleteFileが使用されます。

シェルネームスペースモデルはWindows 95(IShellFolderとフレンド)から存在していますが、IFileOperationはVista以降にのみ存在し、これらのシステムに追加された新しいシェルコピーエンジンの一部です。

+0

'IFileOperation'はファイルシステムディレクトリを再帰的に削除します。これは、Windows APIでは、' FindFirstFile'、 'FindNextFile'、' DeleteFile'と 'RemoveDirectory'のディレクトリでファイルを削除する必要があります(アンチマルウェアスキャナファイルをスキャンするために独自のハンドルを開いたままにすることによって非同期遅延を追加する)。 'IFileOperation'はデフォルトで、ごみ箱(パス長に基づいて可能な場合)、エクスプローラの取り消し操作、および必要に応じてUAC高度を要求するなどのエラーダイアログも使用します。 – eryksun

0

DeleteFileをはWinAPIの古い成分であり、一般的に、より古いシステムでサポートされています。

IFileOperation :: DeleteItemは、標準のWinAPIとは異なるAPIエコシステムと統合するために使用される新しいメソッドです(おそらく、DeleteFileの下流を呼び出します)。

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

関連する問題