VB.NETにおける、ファイルをコピーする方法です。そんなに難しくはないのですが、上書きコピー時に上書きするか確認する場合にちょっと工夫が必要となります。
ファイルコピーする方法
System.IO.FileのCopyメソッドを利用します。例として、とても簡単なフォームを作りました。
コピー元テキストボックスにはコピー元ファイルのパスを、コピー先のテキストボックスにはコピー先のファイルパスを入れて実行ボタンを押下すれば、ファイルをコピーするといったものです。実行ボタン押下時のソースコードは以下です。
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
これでコピー先に既にファイルが存在している場合でも実行時エラーが発生せず、強制的に上書きされます。
上書きするか確認したい場合
コピー先に既にファイルが存在している場合、上書きを許可しなければ実行時エラーが発生し、上書きを許可すれば強制的に上書きされます。上書きするか確認したいという場合は、事前にファイルの存在チェックを実施した後に、上書きするかメッセージボックスに表示して、ユーザーに上書きしても良いか確認するロジックが必要です。
- 実行ボタンを押下
- コピー先のファイルの存在チェックを実施
- ファイルが存在する場合に上書き確認(メッセージボックス表示)
- メッセージボックスのYESボタン押下→上書きコピー
- メッセージボックスの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に期待するのは酷な話なので、自分でロジックを組んだ方が早いですね。
関連記事
参考サイト
.