答えて
DeleteFile
はWindowsのみでサポートされているファイルシステムとファイル共有上のファイルを削除し、低レベルの関数です。IFileOperation::DeleteItem
は、shell namespaceの項目を削除します。
DeleteItemは、理論的には、コントロールパネルの項目、FTPファイル/フォルダとシェル名前空間に住んでいるとSFGAO_CANDELETE
セットを持って何かを削除するために使用することができます。 IShellItem
がDeleteItemに渡されたファイルが通常のファイルシステム上のファイルである場合、最終的にファイルを削除するにはDeleteFile
が使用されます。
シェルネームスペースモデルはWindows 95(IShellFolder
とフレンド)から存在していますが、IFileOperationはVista以降にのみ存在し、これらのシステムに追加された新しいシェルコピーエンジンの一部です。
'IFileOperation'はファイルシステムディレクトリを再帰的に削除します。これは、Windows APIでは、' FindFirstFile'、 'FindNextFile'、' DeleteFile'と 'RemoveDirectory'のディレクトリでファイルを削除する必要があります(アンチマルウェアスキャナファイルをスキャンするために独自のハンドルを開いたままにすることによって非同期遅延を追加する)。 'IFileOperation'はデフォルトで、ごみ箱(パス長に基づいて可能な場合)、エクスプローラの取り消し操作、および必要に応じてUAC高度を要求するなどのエラーダイアログも使用します。 – eryksun
DeleteFileをはWinAPIの古い成分であり、一般的に、より古いシステムでサポートされています。
IFileOperation :: DeleteItemは、標準のWinAPIとは異なるAPIエコシステムと統合するために使用される新しいメソッドです(おそらく、DeleteFileの下流を呼び出します)。
IFileOperationベースは、DeleteFile(これは「アトミック」操作のほうが多い)よりも高い柔軟性とオブジェクト指向設計を備えています。ファイルを削除するという点では、基本的には動作上同じです。
また、[SHFileOperation](https://msdn.microsoft.com/en-us/library/windows/desktop/bb762164(v = vs.85).aspx)も参照してください... – xMRi
IFileOperation :: DeleteItem操作に関するフィードバックと進行を許可します。 DeleteFileは、操作の結果だけではフィードバックを返しませんが。
'IFileOperation ::単一のファイルに対して呼び出されたとき、DeleteItemはより多くのフィードバックを与えることができません( 'DeleteFile'と比較して)。削除ファイルは同期APIなので、ここでは進歩はありません。 – RbMm
- 1. VS2008のデバッガとkernel32.dllの
- 2. P/Invoke for shell32.dllのSHMultiFileProperties
- 3. ハンドル(IntPtr)kernel32.dll、SafeFileHandle to IntPtr
- 4. .NET mscorlib.dllとKernel32.dllの関係
- 5. kernel32.dllからGetPrivateProfileStringを使用する
- 6. kernel32.dllとuser32.dllのみに依存するC++プログラムをコンパイルしますか?
- 7. DLL 'kernel32.dll'の 'GetProcessID'という名前のエントリポイントを見つけることができません
- 8. Shell32.dll .NETインターフェイスはOSによって異なる
- 9. .NET WindowsサービスからShell32.dllを呼び出す
- 10. Shell32.dllを参照していますか?
- 11. VBA - Shell32.dllを使用する代わりに
- 12. shell32.dll; ShellExecute()がPowerbuilderで実行されていない11.5
- 13. 32ビットと64ビットのDLLはどのように同じC:\ system32 \ kernel32.DLLにリンクしますか?
- 14. Javaでkernel32.dllを使用する方法
- 15. ランタイムチェック失敗#0 kernel32.dllからQueryFullProcessImageNameをロード
- 16. GetLocalTime、Kernel32.dll、windows 7の精度はどうですか?
- 17. Kernel32.dllのLinuxに相当するものは何ですか?
- 18. FlsAllocがKERNEL32.dllに見つかりません?
- 19. WriteFile kernel32.dllでPInvokeStackImbalanceが検出されました
- 20. Windows C++でkernel32.dll、user32.dllなどをリンクする必要があるのはなぜですか?
- 21. Javaでwindows shell32.dllを使用してディレクトリショートカットを作成する方法は?
- 22. emgucv、can not find opencv_core220.dllとopencv_imgproc220.dll
- 23. C++ dllとDelphi dllの相違点
- 24. 通常のDLLと拡張DLL
- 25. SQLite:sqlite3.dllとSystem.Data.SQLite.dll?
- 26. Silverlight 5とdll
- 27. DLLとLIBファイル
- 28. JavaアプレットとDLL
- 29. グローバルアセンブリキャッシュとDLL
- 30. sqlite3.dllとsystem.data.sqlite.dll
シェルは、外見上、機能を重複していることがよくあります。バッチ処理の機能を超えて、進捗のフィードバックを得てごみ箱に削除するより大きな違いは、アイテムがファイルである必要はないということです。 Googleシェルネームスペースの拡張機能が役立つかもしれません。 –