記事内に広告が含まれています。

【VB.NET】ファイルをコピーする

VB.NETにおける、ファイルをコピーする方法です。そんなに難しくはないのですが、上書きコピー時に上書きするか確認する場合にちょっと工夫が必要となります。

【スポンサーリンク】

ファイルコピーする方法

System.IO.FileのCopyメソッドを利用します。例として、とても簡単なフォームを作りました。

f:id:neko_britannia:20200521213243j:plain

コピー元テキストボックスにはコピー元ファイルのパスを、コピー先のテキストボックスにはコピー先のファイルパスを入れて実行ボタンを押下すれば、ファイルをコピーするといったものです。実行ボタン押下時のソースコードは以下です。

Private Sub cmdFileCopy_Click(sender As Object, e As EventArgs) Handles cmdFileCopy.Click
    Dim strCopyFrom As String = Nothing
    Dim strCopyTo As String = Nothing
    Try
        'コピー元のファイルパス
        strCopyFrom = txtCopyFrom.Text
        'コピー先のファイルパス
        strCopyTo = txtCopyTo.Text

        'ファイルをコピーする
        System.IO.File.Copy(strCopyFrom, strCopyTo)

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

※実践的なソースコードの場合、ファイルの存在確認等のチェック処理が必要ですが、例として用意したので省いています。

ただし、上記のソースコードを実行した場合、コピー先に既にファイルが存在すると実行時エラーが発生します。コピー先にファイルが存在する場合に上書きを許可したい場合は、Copyメソッドの第3引数にTrueを渡してあげます。

Private Sub cmdFileCopy_Click(sender As Object, e As EventArgs) Handles cmdFileCopy.Click
    Dim strCopyFrom As String = Nothing
    Dim strCopyTo As String = Nothing
    Try
        'コピー元のファイルパス
        strCopyFrom = txtCopyFrom.Text
        'コピー先のファイルパス
        strCopyTo = txtCopyTo.Text

        'ファイルをコピーする(上書き許可)
        System.IO.File.Copy(strCopyFrom, strCopyTo, True)

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

これでコピー先に既にファイルが存在している場合でも実行時エラーが発生せず、強制的に上書きされます。

【スポンサーリンク】

上書きするか確認したい場合

コピー先に既にファイルが存在している場合、上書きを許可しなければ実行時エラーが発生し、上書きを許可すれば強制的に上書きされます。上書きするか確認したいという場合は、事前にファイルの存在チェックを実施した後に、上書きするかメッセージボックスに表示して、ユーザーに上書きしても良いか確認するロジックが必要です。

  • 実行ボタンを押下
  • コピー先のファイルの存在チェックを実施
  • ファイルが存在する場合に上書き確認(メッセージボックス表示)
  1. メッセージボックスのYESボタン押下→上書きコピー
  2. メッセージボックスのNO押下→コピーしない

ソースコードはこの様に書きます。

Private Sub cmdFileCopy_Click(sender As Object, e As EventArgs) Handles cmdFileCopy.Click
    Dim strCopyFrom As String = Nothing
    Dim strCopyTo As String = Nothing
    Try
        'コピー元のファイルパス
        strCopyFrom = txtCopyFrom.Text
        'コピー先のファイルパス
        strCopyTo = txtCopyTo.Text

        'コピー先のファイルが存在するか確認
        If System.IO.File.Exists(strCopyTo) = True Then
            '存在する場合はメッセージボックスを表示
            Dim objResult As DialogResult = MessageBox.Show("ファイルを上書きしますか?",
                                                            "確認",
                                                            MessageBoxButtons.YesNo,
                                                            MessageBoxIcon.Question)

            'いいえボタンが押された場合は終了
            If objResult = DialogResult.No Then
                MessageBox.Show("ファイルコピーを終了します。",
                                "ファイルコピー",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Exclamation)
                Exit Sub
            End If
        End If

        'ファイルをコピーする(上書き許可)
        System.IO.File.Copy(strCopyFrom, strCopyTo, True)

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

この様に書けば、上書きコピーが発生する場合にコピーするかどうかをユーザーに問い合わせることが可能です。

【スポンサーリンク】

編集後記

ファイルコピー自体はそんなに難しくはありませんが、上書きの確認となると少し工夫が必要になります。上書き確認までFileクラスで用意してくれたら便利ではありますが、そこまで.NETFrameworkに期待するのは酷な話なので、自分でロジックを組んだ方が早いですね。

【スポンサーリンク】

関連記事

【VB.NET】ファイルの存在を確認する方法
VB.NETにおける、ファイルの存在を確認する方法です。チェック処理でよくある話ですね。早速行きましょう。
【スポンサーリンク】

参考サイト

File.Copy メソッド (System.IO)
既存のファイルを新しいファイルにコピーします。

.