フォルダをコピーする方法

◆概要

このページは、Visual Basic 6.0でフォルダをコピーする方法について記載しています。


VB6.0でフォルダをコピーする方法には、ファイルシステムオブジェクトを使う方法と、Win32 APIを使う方法があります。

◆ファイルシステムオブジェクトでフォルダをコピーする方法

FileSystemObjectオブジェクトのCopyFolderメソッドを使って、フォルダをコピーします。CopyFolderメソッドの引数は、コピー元のフォルダ名、コピー先のフォルダ名、上書き可否を示すブール型の順で指定します。


VBからファイルシステムオブジェクトを使うために、[プロジェクト]メニューの[参照設定]ダイアログボックスで、[Microsoft Scripting Runtime]を選択しておきます。

Private Sub Command1_Click()
    ' FileSystemObject のインスタンスを取得します。
    Dim fso As New FileSystemObject
   
    'コピー元フォルダをコピー先にコピー
    'コピー元 D:\Temp、コピー先D:\work
    'コピー先に同名のフォルダがあればエラー
    With fso
        .CopyFolder "D:\Temp", "D:\work", False
    End With

End Sub
  

この例では、上書き可否の引数にFalseを設定していますので、コピー先に同名のフォルダがある場合はエラーが発生します。

エラーダイアログ

上書きするかどうかをユーザーに確認したいときは、エラーをトラップして独自のエラー処理が必要になります。また、進行状況を示すダイアログは表示されません。

◆Win32 API関数を使ってフォルダをコピーする方法

SHFileOperation()関数を使って、フォルダをコピーします。

標準モジュール

Option Explicit

'ファイルを操作する関数の宣言
Declare Function SHFileOperation Lib "shell32.dll" Alias _
        "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

' どの操作を行うかを示す定数の宣言
Public Const FO_COPY = &H2&
Public Const FOF_ALLOWUNDO = &H40&

'ファイル操作に関する情報を定義する構造体
Type SHFILEOPSTRUCT
    hWnd    As Long
    wFunc   As Long
    pFrom   As String
    pTo     As String
    fFlags As Long
    fAnyOperationsAborted   As Long
    hNameMappings   As Long
    lpszProgressTitle   As String
End Type
  

フォームモジュール

Private Sub Command1_Click()
    Dim utdShellOpStruct As SHFILEOPSTRUCT
    Dim lngWin32apiResultCode As Long
    
    'ファイル操作に関する情報を指定
    With utdShellOpStruct
        '進行状況を表示するダイアログの
        '親ウィンドウハンドルを指定
        .hWnd = Form1.hWnd
        '実行する操作に[コピー]を指定
        .wFunc = FO_COPY
        'コピー元のフォルダを指定
        .pFrom = "D:\Temp"
        'コピー先のフォルダを指定
        .pTo = "D:\Work"
        'ファイル操作のフラグを指定
        .fFlags = FOF_ALLOWUNDO
    End With
    'ファイル操作を実行
    lngWin32apiResultCode = SHFileOperation(utdShellOpStruct)

End Sub
  

SHFileOperation()関数の引数に渡すSHFILEOPSTRUCT構造体のfFlagsメンバーには、定数FOF_ALLOWUNDO(値は&H40&)を指定していますので、コピー先に同じ名前のフォルダやファイルが存在すれば、上書きを確認するダイアログボックスが自動的に表示されます。

Windows Xp の場合

上書きを確認するダイアログボックス

Windows Vista の場合

上書きを確認するダイアログボックス

また、時間を要する処理が行われる時には、進行状況を表示するダイアログボックスも自動的に表示されます。

Windows Xp の場合

進行状況を表示するダイアログボックス Windows Xpの場合

Windows Vista の場合

進行状況を表示するダイアログボックス Windows Vistaの場合



▼ページトップへ