VB.NETにおける、フォルダの存在確認の方法です。方法はファイルの存在確認とほぼ同じです。
フォルダの存在を確認する方法
フォルダの存在を確認する方法はいくつかありますが、シンプルに「System.IO.Directory.Exists()」を使用する方法を紹介します。
Private Sub cmdDirCheck_Click(sender As Object, e As EventArgs) Handles cmdDirCheck.Click Try If System.IO.Directory.Exists(txtDirPath.Text) = True Then 'フォルダが存在する MessageBox.Show("フォルダがあるよ!", "フォルダ存在チェック", MessageBoxButtons.OK, MessageBoxIcon.Asterisk) Else 'フォルダが存在しない MessageBox.Show("フォルダがないよ!", "フォルダ存在チェック", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End If Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub
ファイルの存在を確認する時と同じで、System.IO.DirectoryクラスのExists()メソッドの引数に、パスを渡すだけでOKです。
画面はこんな感じ。実行ボタンを押して、存在すれば「フォルダがあるよ!」、存在しなければ「フォルダがないよ!」とメッセージボックスが表示されます。
フォルダの存在チェックが必要な理由
ファイルの存在チェックの時にも述べましたが、フォルダ操作の時にフォルダが存在していないと、実行時エラーが発生してしまいます。
また既にフォルダが存在している場合に、上書きの考慮が必要になる場合があります。例えば、フォルダを新規作成しようとする時に、既に同名のフォルダが存在する場合に、上書きして良いのか、それとも、別名にするのかという判断をするために、フォルダの存在チェックが必要になります。
他のフォルダ存在チェックの方法
基本的にはSystem.IO.Directory.Exists()メソッドを利用すれば良いのですが、他にも方法があります。ただし、あくまでも参考程度に知識として持っておくというレベルでとどめておいてください。今から紹介する方法をどこかで見かけたときに、「System.IO.Directory.Exists()メソッド一緒なんだな」というレベルの認識を持っていれば大丈夫です。
FileSystem.DirectoryExists
If My.Computer.FileSystem.DirectoryExists(txtDirPath.Text) = True Then 'フォルダが存在する MessageBox.Show("フォルダがあるよ!", "フォルダ存在チェック", MessageBoxButtons.OK, MessageBoxIcon.Asterisk) Else 'フォルダが存在しない MessageBox.Show("フォルダがないよ!", "フォルダ存在チェック", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End If
FileSystemクラスのDirectoryExistsメソッドを利用する方法です。結果は同じです。
System.IO.DirectoryInfo
Dim objDirInfo As New System.IO.DirectoryInfo(txtDirPath.Text) If objDirInfo.Exists = True Then 'フォルダが存在する MessageBox.Show("フォルダがあるよ!", "フォルダ存在チェック", MessageBoxButtons.OK, MessageBoxIcon.Asterisk) Else 'フォルダが存在しない MessageBox.Show("フォルダがないよ!", "フォルダ存在チェック", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End If
DirectoryInfoのExistsプロパティを参照する方法です。System.IO.Directory.Exists()メソッドと結果は同じですが、引数に空白を渡すとエラーメッセージが異なります(「パスの形式が無効です」と出てくる)。
Dir関数
If Dir(txtDirPath.Text, vbDirectory) <> "" Then 'フォルダが存在する MessageBox.Show("フォルダがあるよ!", "フォルダ存在チェック", MessageBoxButtons.OK, MessageBoxIcon.Asterisk) Else 'フォルダが存在しない MessageBox.Show("フォルダがないよ!", "フォルダ存在チェック", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End If
VB6やVBAの経験者なら何度も見たと思う「Dir関数」です。注意すべきは、末尾に「¥」が入っているとフォルダが存在しない扱いになります。Dir関数以外の方法だと、末尾に「¥」があっても無くても、しっかりと判定してくれます。なので、基本的には使用しない方が良いかと。既存ソースの調査や改修で発見したら要注意ですね。
編集後記
Dir関数がちょっとクセ者感がありますが、VB6からのマイグレーションしたシステムなどでよく見られます。基本的にはSystem.IO.Directory.Exists()メソッドを利用してファイルの存在チェックを実施すればOKです。その他のチェック方法は知識として知っておきましょう。
関連記事
https://www.stellacreate.com/entry/vbnet-file-exists
参考サイト
System.IO.Directory.Exists()メソッド
DirectoryExists()メソッド
DirectoryInfo.Exists プロパティ
Dir関数
.