フォルダをコピーする
スポンサーリンク
.NET Framework には、ディレクトリ (フォルダ) 内をすべてコピーするようなメソッドは用意されていません。手動でディレクトリを作成し、配下にあるすべてのディレクトリとファイルをコピーすることになります。
以下は、その処理をメソッド化したものです。再帰呼び出しを使って、配下にあるすべてのディレクトリとファイルをコピーしています。第 3 引数の "上書き指定" によって同名のファイルの上書きを指定することができます。
サンプルコード
以下にサンプルコードを示します。
VB.NET 全般
''' ------------------------------------------------------------------------------------ ''' <summary> ''' ファイルまたはディレクトリ、およびその内容を新しい場所にコピーします。 ''' 新しい場所に同名のファイルがある場合は上書きしません。<summary> ''' <param name="stSourcePath"> ''' コピー元のディレクトリのパス。</param> ''' <param name="stDestPath"> ''' コピー先のディレクトリのパス。</param> ''' ------------------------------------------------------------------------------------ Public Shared Overloads Sub CopyDirectory(ByVal stSourcePath As String, ByVal stDestPath As String) CopyDirectory(stSourcePath, stDestPath, False) End Sub ''' ------------------------------------------------------------------------------------ ''' <summary> ''' ファイルまたはディレクトリ、およびその内容を新しい場所にコピーします。<summary> ''' <param name="stSourcePath"> ''' コピー元のディレクトリのパス。</param> ''' <param name="stDestPath"> ''' コピー先のディレクトリのパス。</param> ''' <param name="bOverwrite"> ''' コピー先が上書きできる場合は True。それ以外の場合は False。</param> ''' ------------------------------------------------------------------------------------ Public Shared Overloads Sub CopyDirectory(ByVal stSourcePath As String, ByVal stDestPath As String, ByVal bOverwrite As Boolean) ' コピー先のディレクトリがなければ作成する If System.IO.Directory.Exists(stDestPath) = False Then System.IO.Directory.CreateDirectory(stDestPath) System.IO.File.SetAttributes(stDestPath, System.IO.File.GetAttributes(stSourcePath)) bOverwrite = True End If ' コピー元のディレクトリにあるすべてのファイルをコピーする If bOverwrite Then For Each stCopyFrom As String In System.IO.Directory.GetFiles(stSourcePath) Dim stCopyTo As String = System.IO.Path.Combine(stDestPath, System.IO.Path.GetFileName(stCopyFrom)) System.IO.File.Copy(stCopyFrom, stCopyTo, True) Next stCopyFrom ' 上書き不可能な場合は存在しない時のみコピーする Else For Each stCopyFrom As String In System.IO.Directory.GetFiles(stSourcePath) Dim stCopyTo As String = System.IO.Path.Combine(stDestPath, System.IO.Path.GetFileName(stCopyFrom)) If System.IO.File.Exists(stCopyTo) = False Then System.IO.File.Copy(stCopyFrom, stCopyTo, False) End If Next stCopyFrom End If ' コピー元のディレクトリをすべてコピーする (再帰) For Each stCopyFrom As String In System.IO.Directory.GetDirectories(stSourcePath) Dim stCopyTo As String = System.IO.Path.Combine(stDestPath, System.IO.Path.GetFileName(stCopyFrom)) CopyDirectory(stCopyFrom, stCopyTo, bOverwrite) Next stCopyFrom End Sub
使用例は以下のようになります。
VB.NET 全般
// フォルダをコピーする (コピー先に同名のファイルがある場合は上書きしない) CopyDirectory("C:\Hoge\", "C:\Foo\"); // フォルダをコピーする (コピー先に同名のファイルがある場合は上書きする) CopyDirectory("C:\Hoge\", "C:\Bar\", True);
関連するリファレンス
準備中です。