VB.NET Tips - フォルダコピー(サブフォルダ以下も含む)

指定されたコピー先のフォルダに、コピー元のフォルダ名の中身を全てコピーする関数です。 コピー先のフォルダが存在しない場合は、作成します。 最初にコピー元のフォルダ内のファイルを全てコピー先にコピーを行います。 コピー元のフォルダ内のファイル一覧を取得には System.IO.Directory.GetFiles を用います。
その後で、コピー元のフォルダ内のサブフォルダの一覧を取得し、自分自身を再帰的にコールすることで コピーを行います。サブフォルダの一覧の取得は System.IO.Directory.GetDirectories を用います。

System.IO.Directory.GetFiles 関数について

Public Shared Function GetFiles (path As String) As String()
path:
    検索するディレクトリの相対パスまたは絶対パス。 この文字列の大文字と小文字は区別されません。
戻り値:
    指定したディレクトリ内のファイルの完全名 (パスを含む) の配列。
    ファイルが見つからない場合は空の配列。(空と言うことはLengthが 0 のString配列)

System.IO.Directory.GetDirectories 関数について

Public Shared Function GetDirectories (path As String) As String()
path:
    検索するディレクトリの相対パスまたは絶対パス。 この文字列の大文字と小文字は区別されません。
戻り値:
    指定したパス内のサブディレクトリのフルネーム (パスを含む) の配列。
    ディレクトリが見つからない場合は空の配列。(空と言うことはLengthが 0 のString配列)

フォルダコピー関数

01''' -----------------------------------------------------------------------
02''' <summary>
03''' フォルダコピー(サブフォルダ以下も含む)
04''' </summary>
05''' <param name="astrSrcFolderName">コピー元フォルダ
06''' <param name="astrDesFolderName">コピー先フォルダ
07''' <returns>True:正常, False:エラー</returns>
08''' -----------------------------------------------------------------------
09Function CopyFolder(ByVal astrSrcFolderName As String, ByVal astrDesFolderName As String) As Boolean
10    '戻り値初期化
11    CopyFolder = False
12    Try
13        'コピー先のフォルダがないときは作る
14        If Not System.IO.Directory.Exists(astrDesFolderName) Then
15            System.IO.Directory.CreateDirectory(astrDesFolderName)
16            '属性もコピー
17            System.IO.File.SetAttributes(astrDesFolderName, System.IO.File.GetAttributes(astrSrcFolderName))
18        End If
19 
20        'コピー先のフォルダ名の末尾に"\"をつける
21        If astrDesFolderName.Chars((astrDesFolderName.Length - 1)) <> System.IO.Path.DirectorySeparatorChar Then
22            astrDesFolderName &= System.IO.Path.DirectorySeparatorChar
23        End If
24 
25        'コピー元のフォルダにあるファイルをコピー
26        Dim ArrFiles As String() = System.IO.Directory.GetFiles(astrSrcFolderName)
27        Dim strFile As String
28        For Each strFile In ArrFiles
29            System.IO.File.Copy(strFile, astrDesFolderName + System.IO.Path.GetFileName(strFile), True)
30        Next
31 
32        'コピー元のフォルダにあるフォルダをコピー(再帰呼出)
33        Dim ArrDirs As String() = System.IO.Directory.GetDirectories(astrSrcFolderName)
34        Dim strDir As String
35        For Each strDir In ArrDirs
36            If CopyFolder(strDir, astrDesFolderName + System.IO.Path.GetFileName(strDir)) = False Then
37                '再帰呼出での内部のフォルダのコピーがエラーの場合
38                Return False
39            End If
40        Next
41 
42        '正常終了
43        Return True
44 
45    Catch ex As Exception
46        'エラー処理が必要な場合は、ここに記述する
47    End Try
48End Function
楽天市場


総アクセス数