エンジニアの将来って?

現在10年目エンジニアがプログラムの解説、ゲームの研究を書く雑記ブログです

【C#】ディレクトリ(フォルダ)を削除をするDirectory.Deleteメソッドを解説します

こんにちは。たいら(@tairaengineer2)です。
この記事では、C#ディレクトリ(フォルダ)削除をするDirectory.Deleteメソッドについて解説します。

スポンサーリンク

 

前提条件

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

www.tairax.com

Directory.Deleteメソッドとは

Directory.Deleteメソッドとは、その名の通りディレクトリ(フォルダ)を削除するメソッドです。

Directory.Delete メソッド
名前空間:System.IO
アセンブリ:System.IO.FileSystem.dll, mscorlib.dll, netstandard.dll
指定されたディレクトリとオプションでサブディレクトリを削除します。

Directory.Delete メソッド (System.IO) | Microsoft Docsから引用させて頂きました

このメソッドはusingは

using System.IO;

を使います。

このメソッドはオーバーロードされており、

  • Directory.Delete(string)
  • Directory.Delete(string,bool)

の2パターンがあります。
それぞれ解説します。

パターン1:Directory.Delete(string)

使い方は

f:id:Tairax:20200311210632p:plain

  • 第1引数:目的のディレクトリまでのパスを指定

です。
指定されたディレクトリが空では無かった場合、IOException例外が発生します。
絶対パスと相対パスについては、こちらの記事をご参考ください。

www.tairax.com

相対パスで書く場合、注意が必要です。
なぜなら、exeファイルの場所とソリューションプロジェクトの場所が異なるからです。
そのため、相対パスで指定する場合は注意してください。
この記事では、絶対パスで指定して解説します。

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

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

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

では、実際に使ってみます。
Directory.Deleteメソッドで実際にディレクトリを2つ削除し、結果をコンソールに表示します。
それぞれ

  • 中身が空のディレクトリ
  • 中身があるディレクトリ

です。

コンソールプロジェクトを作成するやり方は下の記事をご参考ください。

www.tairax.com

プログラムを作成したあと、ビルドをするやり方はこちらの記事をご参考ください。

www.tairax.com

C#サンプルコード

using System;
using System.IO;

namespace ConsoleApp1
{
    /// <summary>
    /// Directory.Deleteのサンプル(引数1つ)
    /// </summary>
    class Program
    {
        /// <summary>
        /// メイン
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            // 成功パターン
            string noFile = @"C:\test\test";
            Directory.Delete(noFile);
            Console.WriteLine(noFile + "の削除が成功しました");

            // 失敗パターン
            string existsFile = @"C:\test\test2";
            Directory.Delete(existsFile);
            Console.WriteLine(existsFile + "の削除が成功しました");
        }
    }
}

実行結果

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

  • 削除するディレクトリがあるか
  • 失敗パターンのディレクトリに中身はあるか

を確認します。
指定したパスには、↓画像の通り2つディレクトリがあります。

f:id:Tairax:20200311212457p:plain

【test】の中は空であることが確認できました。

f:id:Tairax:20200311212632p:plain

【test2】の中は空でないことが確認できました

f:id:Tairax:20200311212802p:plain

では、実行します。

f:id:Tairax:20200311213038p:plain

C:\test\testの削除が成功しました

ハンドルされていない例外: System.IO.IOException: ディレクトリが空ではありません
。

   場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   場所 System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boole
an recursive, Boolean throwOnTopLevelDirectoryNotFound, WIN32_FIND_DATA& data)
   場所 System.IO.Directory.Delete(String fullPath, String userPath, Boolean rec
ursive, Boolean checkHost)
   場所 System.IO.Directory.Delete(String path)
   場所 ConsoleApp1.Program.Main(String[] args) 場所 C:\Users\○○○○○○\source\re
pos\ConsoleApp1\ConsoleApp1\Program.cs:行 24
続行するには何かキーを押してください . . .

【test2】のディレクトリが空でなかったので、IOException例外が発生しました。
【test】のディレクトリが削除できたか確認します。

f:id:Tairax:20200311213429p:plain

削除できていることが確認できました!

 

スポンサーリンク

 

パターン2:Directory.Delete(string,bool)

使い方は

f:id:Tairax:20200311214215p:plain

  • 第1引数:目的のディレクトリまでのパスを指定
  • 第2引数:指定されたディレクトリの中身の有無で削除するかを指定

です。
第2引数で【true】を指定した場合、注意が必要です。
なぜなら

  • ファイル
  • ディレクトリ
  • サブディレクトリ

一切合切すべて削除するからです。
【true】を指定する場合は、注意してください。

では、実際に使ってみます。
Directory.Deleteメソッドで中身があるディレクトリに対して実行し、結果をコンソールに表示します。
それぞれ

  • trueを指定
  • falseを指定

です。

コンソールプロジェクトを作成するやり方は下の記事をご参考ください。

www.tairax.com

プログラムを作成したあと、ビルドをするやり方はこちらの記事をご参考ください。

www.tairax.com

C#サンプルコード

using System;
using System.IO;

namespace ConsoleApp1
{
    /// <summary>
    /// Directory.Deleteのサンプル(引数2つ)
    /// </summary>
    class Program
    {
        /// <summary>
        /// メイン
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            // 成功パターン
            string existFile = @"C:\test\test";
            Directory.Delete(existFile, true);
            Console.WriteLine(existFile + "の削除が成功しました");

            // 失敗パターン
            string emptyFile = @"C:\test\test2";
            Directory.Delete(emptyFile, false);
            Console.WriteLine(emptyFile + "の削除が成功しました");
        }
    }
}

実行結果

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

  • 削除するディレクトリがあるか
  • 失敗パターンのディレクトリに中身はあるか

を確認します。
指定したパスには、↓画像の通り2つディレクトリがあります。

f:id:Tairax:20200311212457p:plain

【test】の中にファイルがあることが確認できました。

f:id:Tairax:20200311215306p:plain

【test2】の中にファイルがあることが確認できました。

f:id:Tairax:20200311212802p:plain

では、実行します。

f:id:Tairax:20200311215514p:plain

C:\test\testの削除が成功しました

ハンドルされていない例外: System.IO.IOException: ディレクトリが空ではありません
。

   場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   場所 System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boole
an recursive, Boolean throwOnTopLevelDirectoryNotFound, WIN32_FIND_DATA& data)
   場所 System.IO.Directory.Delete(String fullPath, String userPath, Boolean rec
ursive, Boolean checkHost)
   場所 System.IO.Directory.Delete(String path, Boolean recursive)
   場所 ConsoleApp1.Program.Main(String[] args) 場所 C:\Users\○○○○○○\source\re
pos\ConsoleApp1\ConsoleApp1\Program.cs:行 24
続行するには何かキーを押してください . . .

【test2】のディレクトリが空でなかったので、IOException例外が発生しました。
【test】のディレクトリが削除できたか確認します。

f:id:Tairax:20200311215824p:plain

削除できていることが確認できました!

 

スポンサーリンク

 

まとめ:Directory.Deleteメソッドを使ってディレクトリを削除してみよう!

以上がディレクトリを削除できるDirectory.Deleteメソッドの解説です。
まとめなので、もう1度Directory.Deleteメソッドの使い方を載せておきます。

引数がstringのみの場合は

f:id:Tairax:20200311210632p:plain

引数がstringとboolの場合は

f:id:Tairax:20200311214215p:plain

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

 

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

【C#】ディレクトリ(フォルダ)の存在チェックをするDirectory.Existsメソッドを解説します

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

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

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