表紙へ

ファイルのコピー・削除2

 

ファイルのコピー・削除1との違いはファイルをまとめて扱う効率性と、ダイアログの表示などの付加操作にある。こちらで解説するほうが高度な例なので必要なければ使う必要はない。

 

1.コピーの単純な例

'C:\CopySource以下にあるファイルをすべてC:\CopyTarget\以下にコピーする。

'コピーに時間がかかる場合はコピー中のダイアログが自動的に表示される。

'このサンプルを動作させるにはフォーム上にコマンドボタンを1つ貼り付けること。

Private Declare Function SHFileOperation Lib "shell32" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

Private Type SHFILEOPSTRUCT
    hwnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAnyOperationsAborted As Long
    hNameMappings As Long
    lpszProgressTitle As String
End Type

Private Const FO_COPY = &H2
Private Const FO_DELETE = &H3
Private Const FO_MOVE = &H1
Private Const FO_RENAME = &H4

Private Sub Command1_Click()

    Dim Ret As Long
    Dim sf As SHFILEOPSTRUCT

    sf.hwnd = Me.hwnd
    sf.wFunc = FO_COPY
    sf.pFrom = "C:\CopySource\*"
    sf.pTo = "C:\CopyTarget"

    Ret = SHFileOperation(sf)

    If Ret <> 0 Then MsgBox "失敗しました。"

End Sub

 

2.特定の拡張子のファイルだけをコピーする例

「1.コピーの単純な例」で紫色の字で * となっている所を次のように変更するだけ。

変更の例

拡張子がtxtのもののみコピーする場合    *.txt

この例は「1.コピーの単純な例」とほぼ同じなので特に掲載しない。

 

.削除の単純な例

「1.コピーの単純な例」で赤字でFO_COPYとなっている所をFO_DELETEにする。

’C:\CopySource\以下のファイルをすべて削除する例

'上の例と異なる部分は色を変えて示してある。

Private Declare Function SHFileOperation Lib "shell32" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

Private Type SHFILEOPSTRUCT
    hwnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAnyOperationsAborted As Long
    hNameMappings As Long
    lpszProgressTitle As String
End Type

Private Const FO_COPY = &H2
Private Const FO_DELETE = &H3
Private Const FO_MOVE = &H1
Private Const FO_RENAME = &H4

Private Sub Command1_Click()

    Dim Ret As Long
    Dim sf As SHFILEOPSTRUCT

    sf.hwnd = Me.hwnd
    sf.wFunc = FO_DELETE
    sf.pFrom = "C:\CopySource\*"
    'sf.pTo = "C:\CopyTarget"  この行は削除の場合は必要ない。

    Ret = SHFileOperation(sf)

    If Ret <> 0 Then MsgBox "失敗しました。"

End Sub

 

 

4.その他の高度な例

SHFileOperation関数を使った例は紹介しきれないのでマイクロソフトの解説ページを参照のこと。ただし、このページは英語です。