印刷用ページ      送信     
クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
ファイルをゴミ箱に移動させる方法について

最終更新日 2006 年 7 月 20 日

サンプル コードのダウンロード (vbmigtips_SHFileOperation.msi, 489 KB)

※ このサンプルをインストールするには Visual Studio 2005 が必要です。

ファイルを完全に削除するのではなく、ゴミ箱に移動させたい場合があると思います。そこで今回、ファイルをゴミ箱に移動させる方法について紹介します。

ファイルをゴミ箱に移動させる場合、Win32 API の SHFileOperation 関数を使用します。実装方法は以下のとおりです。今回は、図1 の「ファイルを削除」ボタンをクリックすると、ダイアログが表示され、削除するファイルを選択後、「開く」ボタンをクリックすると選択したファイルがゴミ箱に移動されるアプリケーションを作成します。]


 図 1

まず、ファイルをゴミ箱に移動させる SHFileOperation 関数の定義の宣言と、ファイル操作に関する情報を格納する SHFILEOPSTRUCT 構造体の宣言を行います。

Friend Class NativeMethods

    <DllImport("shell32.dll", CharSet:=CharSet.Unicode)> _
    Friend Shared Function SHFileOperation(ByRef lpFileOp As SHFILEOPSTRUCT) As Integer
    End Function
	
    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode, Pack:=1)> _
    Structure SHFILEOPSTRUCT
        Friend hwnd As IntPtr
        Friend wFunc As Integer
        <MarshalAs(UnmanagedType.LPWStr)> Friend pFrom As String
        <MarshalAs(UnmanagedType.LPWStr)> Friend pTo As String
        Friend fFlags As Short
        Friend fAnyOperationsAborted As Integer
        Friend hNameMappings As IntPtr
        <MarshalAs(UnmanagedType.LPWStr)> Friend lpszProgressTitle As String
        End Structure
		
    Friend Const FO_COPY = &H2
    Friend Const FO_DELETE = &H3
    Friend Const FO_MOVE = &H1
    Friend Const FOF_ALLOWUNDO = &H40
	
    Private Sub New() 
    End Sub
	
End Class

リスト1

次に、リスト1 で定義の宣言を行った SHFileOperation 関数を呼び出し、指定したファイルをゴミ箱に移動させます。今回は、ゴミ箱に移動させるファイルをダイアログから選択します。実装コードは以下のとおりです。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim strDeletionFile As String
	
    OpenFileDialog1.Multiselect = True
    OpenFileDialog1.Filter = "すべてのファイル (*.*)|*.*"
    OpenFileDialog1.FileName = ""
    OpenFileDialog1.Title = "削除するファイルを選択してください"
	
    If Windows.Forms.DialogResult.OK = Me.OpenFileDialog1.ShowDialog() Then
        For Each fileName As String In OpenFileDialog1.FileNames
            strDeletionFile = strDeletionFile + fileName + ControlChars.NullChar
        Next
		
        Dim sh As NativeMethods.SHFILEOPSTRUCT
        Dim result As Integer
		
        Try
            With sh
                .hwnd = IntPtr.Zero
                .wFunc = NativeMethods.FO_DELETE
                .pFrom = strDeletionFile
                .pTo = Nothing
                .fFlags = NativeMethods.FOF_ALLOWUNDO
                .fAnyOperationsAborted = False
                .hNameMappings = IntPtr.Zero
                .lpszProgressTitle = Nothing
            End With
            result = NativeMethods.SHFileOperation(sh)
        Catch ex As Exception
            MessageBox.Show("ファイルを削除できません。")
            Throw
        End Try
    End If
End Sub

リスト2

上記(リスト2)の「OpenFileDialog1.Multiselect = True」では、ダイアログで複数ファイルの選択を可能にします。

「For Each fileName As String In OpenFileDialog1.FileNames ... Next」では、選択したファイル名を取得します。「strDeletionFile = strDeletionFile + fileName + ControlChars.NullChar」で、選択したファイルのパスを変数 strDeletionFile に格納します。この際、ファイル名とファイル名のターミネータとして Null 文字(ControlChars.NullChar)を追加します。

「With sh ... End With」では、ファイル操作に関する情報を格納します。今回は、ファイルを削除するため、wFunc パラメータに FO_DELETE を設定(「.wFunc = FO_DELETE」)し、fFlags パラメータに ALLOWUNDO を設定(「.fFlags = FOF_ALLOWUNDO」)します。これにより、アンドゥ情報が保持され、ファイルがゴミ箱に入れられます。

そして、「result = SHFileOperation(sh)」で、指定したファイルをゴミ箱に移動させます。

以上の実装を行い、図1 の「ファイルを削除」ボタンをクリックすると、ダイアログが表示されます(図2)。


 図 2

図2 のように、複数ファイルを選択し、「開く」ボタンをクリックします。すると、[ファイルの削除の確認]ダイアログ(図2)が表示されます。

 図
 図 3

図3 で「はい」ボタンを選択すると、指定したファイルがゴミ箱に移動し、「いいえ」ボタンを選択すると、処理は中断されます。

© 2008 Microsoft Corporation.All rights reserved. 使用条件  |  商標  |  プライバシー
Page view tracker