Web
Analytics

社畜ゲートウェイ

京成・京急を中心に取り上げる阪急ファンのブログです。日本一遅い速報を届けます。

MENU

【スポンサーリンク】

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

【スポンサーリンク】

f:id:neko_britannia:20200515220156j:plain

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

ファイルコピーする方法

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に期待するのは酷な話なので、自分でロジックを組んだ方が早いですね。

 

関連記事

今回、ファイルの存在チェックを実施しているロジックは過去記事で取り上げています。合わせてご覧下さい。

www.stellacreate.com

参考サイト

System.IO.File.Copy メソッド

docs.microsoft.com