System.IO.File.Existsメソッドを使用することにより、ファイルが存在しているか調べることができます。File.ExistsメソッドがTrueを返せば、ファイルが存在します。
同様にディレクトリがあるか調べるには、System.IO.Directory.Existsメソッドを使います。
File.Existsメソッドでフォルダの存在を調べることはできません。File.Existsメソッドに存在するフォルダを指定しても結果はFalseになります。また、パス名として無効な文字列を指定しても、Falseです。さらには、たとえファイルが存在しても、ファイルを読み取るのに十分なアクセス許可を持たない場合も、Falseです。
Directory.Existsメソッドに指定するフォルダ名は、パスの最後に"\"があってもなくても、"C:"のようであっても、問題ありません。
次の例では、ファイル"C:\test.txt"が存在しているかを調べています。
Dim fileName As String = "C:\test.txt" If System.IO.File.Exists(fileName) Then MessageBox.Show("'" + fileName + "'は存在します。") Else MessageBox.Show("'" + fileName + "'は存在しません。") End If
string fileName = @"C:\test.txt"; if (System.IO.File.Exists(fileName)) { MessageBox.Show("'" + fileName + "'は存在します。"); } else { MessageBox.Show("'" + fileName + "'は存在しません。"); }
補足:.NET Framework 2.0以降のVB.NETでは、My.Computer.FileSystem.FileExistsメソッドでファイルの存在を、My.Computer.FileSystem.DirectoryExistsメソッドでフォルダの存在を確認することもできます。
初心者にも優しいと思います。
読んですぐに理解できた
調べていたことの答えにドンピシャでした。ありがとうございます。
> パスが存在していると判断されてしまう仕様なんですね
"."は現在のディレクトリと解釈されますが、"D:"は"D:\"(ドライブDのルート)と解釈されませんか?おそらく内部でPath.GetFullPathと同等の変換が行われているものと思われます。
> できれば、相対パスは除外して判断して欲しいけど無理なのかな?
絶対パスか相対パスか判断する方法の記事を書きましたので、参考にしていただければ幸いです。
http://dobon.net/vb/dotnet/file/isabsolutepath.html
パスが存在していると判断されてしまう仕様なんですね
エクスプローラの上部みたいに、絶対パスを入力する項目の
有効性の確認に使用してたので、これは想定外でした。
できれば、相対パスは除外して判断して欲しいけど無理なのかな?