DOBON.NET

ファイル、ディレクトリが存在するか調べる

System.IO.File.Existsメソッドを使用することにより、ファイルが存在しているか調べることができます。File.ExistsメソッドがTrueを返せば、ファイルが存在します。

同様にディレクトリがあるか調べるには、System.IO.Directory.Existsメソッドを使います。

File.Existsメソッドでフォルダの存在を調べることはできません。File.Existsメソッドに存在するフォルダを指定しても結果はFalseになります。また、パス名として無効な文字列を指定しても、Falseです。さらには、たとえファイルが存在しても、ファイルを読み取るのに十分なアクセス許可を持たない場合も、Falseです。

Directory.Existsメソッドに指定するフォルダ名は、パスの最後に"\"があってもなくても、"C:"のようであっても、問題ありません。

次の例では、ファイル"C:\test.txt"が存在しているかを調べています。

VB.NET
コードを隠すコードを選択
Dim fileName As String = "C:\test.txt"
If System.IO.File.Exists(fileName) Then
    MessageBox.Show("'" + fileName + "'は存在します。")
Else
    MessageBox.Show("'" + fileName + "'は存在しません。")
End If
C#
コードを隠すコードを選択
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メソッドでフォルダの存在を確認することもできます。

  • 履歴:
  • 2007/2/19 .NET Framework 2.0に関する記述を追加。
  • 2010/9/15 コードを書き換えた。説明を追加。
  • 2011/5/31 C#のサンプルがディレクトリの存在を調べるコードになっていたのを修正。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。
共有する

この記事への評価
良い / 悪い = 128 / 7

この記事へのコメント
通常のコメント [ いつもありがとうございます。 ] 2016年9月23日 08:39:43
ディレクトリの例も記載してもらえると
初心者にも優しいと思います。

評価の理由 [ v ] 2016年7月26日 13:08:12
評価:良い
読んですぐに理解できた

評価の理由 [ みのむし ] 2016年6月17日 05:45:56
評価:良い
調べていたことの答えにドンピシャでした。ありがとうございます。

通常のコメント [ 管理人 ] 2016年5月16日 15:46:27
> ".(ドット)"や"D:"だと相対パスでEXEのあるフォルダと認識され、
> パスが存在していると判断されてしまう仕様なんですね

"."は現在のディレクトリと解釈されますが、"D:"は"D:\"(ドライブDのルート)と解釈されませんか?おそらく内部でPath.GetFullPathと同等の変換が行われているものと思われます。

> できれば、相対パスは除外して判断して欲しいけど無理なのかな?

絶対パスか相対パスか判断する方法の記事を書きましたので、参考にしていただければ幸いです。

http://dobon.net/vb/dotnet/file/isabsolutepath.html

通常のコメント [ 銛のくまさん ] 2015年8月10日 19:47:48
".(ドット)"や"D:"だと相対パスでEXEのあるフォルダと認識され、
パスが存在していると判断されてしまう仕様なんですね

エクスプローラの上部みたいに、絶対パスを入力する項目の
有効性の確認に使用してたので、これは想定外でした。

できれば、相対パスは除外して判断して欲しいけど無理なのかな?


この記事に関するコメントを投稿するには、下のボタンをクリックしてください。投稿フォームへ移動します。通常のご質問、ご意見等は掲示板へご投稿ください。