エンジニアの将来って?

現在7年目のCOBOL→Java→C#エンジニアが、将来への考えや勉強のアウトプット、たまに腎臓について書くブログです

【C#】ファイルの存在チェックをするFile.Existsメソッドを解説します

こんにちは。たいら(@tairaengineer2)です。
この記事では、C#ファイル存在チェックをするFile.Existsメソッドについて解説します。

 

前提条件

この記事では、Visual Studio 2017 Communityを使っています。
インストールの仕方は、下の記事をご参考ください。

www.tairax.com

File.Existsメソッドとは

Existsメソッドとは、その名の通りファイルの存在チェックをするメソッドです。

File.Exists(String) Method
名前空間:System.IO
指定したファイルが存在するかどうかを確認します。
public static bool Exists (string path);

File.Exists(String) Method (System.IO) | Microsoft Docsから引用させて頂きました

このメソッドはusingは

using System.IO;

を使います。
使い方は

f:id:Tairax:20190527224916p:plain

  • 第1引数:目的のファイルまでのパスを指定

です。
相対パスを注意した方がよいと書いた理由は、後ほど書きます。
絶対パスと相対パスについては、こちらの記事をご参考ください。

www.tairax.com

先ほど例に出したパスの前に【@】がついていますが、これは逐語的文字列というものです。

C# のキーワードを識別子として使用できるようにする。
コード要素のプレフィックスとして @ 文字を使用すると、その要素はC# のキーワードではなく、識別子としてコンパイラに解釈されます。

@ - C# リファレンス | Microsoft Docsから引用させて頂きました

File.Existsメソッドでファイルの存在チェック

実際にFile.Existsメソッドを使ってファイルの存在チェックをしてみます。
解説するパターンは

  1. 相対パスで指定して存在チェック
  2. 絶対パスで指定して存在チェック

の2パターンを解説します。

パターンその1:相対パスで指定して存在チェック

解説に使うプログラムは、File.Existsメソッドを使ってファイルの存在チェックをするというシンプルなものです。
先ほど書いた通り、第1引数で指定するパスは相対パスです。

C#サンプルコード

using System;
using System.IO;

namespace ConsoleApp1
{
    /// <summary>
    /// 相対パスでファイルの存在チェック
    /// </summary>
    class Program
    {
        /// <summary>
        /// メイン
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            // 成功パターン
            if (File.Exists(@"./success.txt"))
            {
                Console.WriteLine("success.txtは存在します");
            }
            else
            {
                Console.WriteLine("success.txtは存在しません");
            }

            // 失敗パターン
            if (File.Exists(@"./miss.txt"))
            {
                Console.WriteLine("miss.txtは存在します");
            }
            else
            {
                Console.WriteLine("miss.txtは存在しません");
            }
        }
    }
}

実行結果

では、実行しますが、その前に

  • 存在チェックするファイルがどこにあるのか
  • ファイルがあるかどうか

を確認します。
今回は存在チェックするファイルを相対パスで指定しています。

  • ./success.txt
  • ./miss.txt

の意味としては、実行ファイルと同じ場所に格納する必要があります。
結論から言うとファイルは、ビルドしてexeファイルが出来る場所に置きます。

f:id:Tairax:20190527231908p:plain

さきほど相対パスで書く場合、注意した方がよいと書いたのはこれが理由です。
ビルドして実行するときは、exeファイルを使います。
ソリューションプロジェクトとexeファイルがある場所は異なります。
なので相対パスで指定したファイルは、ソリューションプロジェクトがある場所ではなく、ビルドしてexeファイルが出来る場所に置く必要があります。

【success.txt】だけがあることを確認できました。
では、実行します。

f:id:Tairax:20190527232243p:plain

success.txtは存在します
miss.txtは存在しません
続行するには何かキーを押してください . . .
  • success.txt:存在する
  • miss.txt:存在しない

これらが確認できました!

パターンその2:絶対パスで指定して存在チェック

解説に使うプログラムは、File.Existsメソッドを使ってファイルの存在チェックをするというシンプルなものです。
先ほど書いた通り、第1引数で指定するパスは絶対パスです。

C#サンプルコード

using System;
using System.IO;

namespace ConsoleApp1
{
    /// <summary>
    /// 絶対パスでファイルの存在チェック
    /// </summary>
    class Program
    {
        /// <summary>
        /// メイン
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            // 成功パターン
            if (File.Exists(@"C:/work/success.txt"))
            {
                Console.WriteLine("success.txtは存在します");
            }
            else
            {
                Console.WriteLine("success.txtは存在しません");
            }

            // 失敗パターン
            if (File.Exists(@"C:/work/miss.txt"))
            {
                Console.WriteLine("miss.txtは存在します");
            }
            else
            {
                Console.WriteLine("miss.txtは存在しません");
            }
        }
    }
}

実行結果

では、実行しますが、その前に

  • 存在チェックするファイルがどこにあるのか
  • ファイルがあるかどうか

を確認します。
今回は存在チェックするファイルを絶対パスで指定しています。

f:id:Tairax:20190527233230p:plain

【success.txt】だけがあることを確認できました。
では、実行します。

f:id:Tairax:20190527233448p:plain

success.txtは存在します
miss.txtは存在しません
続行するには何かキーを押してください . . .
  • success.txt:存在する
  • miss.txt:存在しない

これらが確認できました!

まとめ:File.Existsメソッドを使ってファイルの存在チェックをしてみよう!

以上がファイルの存在チェックをするFile.Existsメソッドの解説です。

f:id:Tairax:20190527224916p:plain

あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ

 

ほかにもC#解説記事を書いてます。
よければご参考ください。

【C#】ファイルを削除する、Deleteメソッドを解説します

【C#】ファイルに上書きする、WriteAllTextメソッドを解説します

今までブログで解説したC#の解説まとめ記事はこちらをご参考ください。

【C#】ブログで書いた文法記事のまとめ