C#のディレクトリ操作方法とは?取得や作成・削除まで解説
 
          - システム
 エンジニア
- C#でのディレクトリ操作はどのようなことができるのですか。
- プロジェクト
 マネージャー
- C#ではディレクトリの取得、作成、一覧取得、コピー、移動、削除など、様々な操作ができます。
C#のディレクトリについて

            今回は、「C#でのディレクトリ操作」についてご説明します。「ディレクトリ」とは、コンピュータにおけるファイルなどの格納庫のような場所を表します。
C#では、ディレクトリの取得、作成、一覧取得、コピー、移動、削除など、様々な操作ができます。
それぞれのプログラミングコードを参照にしながら、実際のコードを用いてご説明していきますので、C#でのディレクトリ操作に興味のある方はぜひご一読ください。
ディレクトリの取得
「C#」では、パスの文字列から「ディレクトリ名」を取得できます。
実際のソースコードを見てみましょう。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         | 
                          System.Console.WriteLine(
                         
                            System.IO.Path.GetDirectoryName(
                         
                            @"C:\path\to\test.txt"));
                         | 
実行結果は以下のようになります。
| 
                          1
                         | 
                          C:\path\to
                         | 
このような手順で、「GetDirectoryNameメソッド」で、パスの文字列からディレクトリ名を取得できます。
ディレクトリの作成
「C#」では、「CreateDirectoryメソッド」を用いてディレクトリを作成します。
実際のソースコードを見てみましょう。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         
                          7
                         
                          8
                         
                          9
                         
                          10
                         
                          11
                         
                          12
                         
                          13
                         
                          14
                         
                          15
                         
                          16
                         
                          17
                         
                          18
                         
                          19
                         | 
                          using System;
                         
                          using System.IO;
                         
                          public class Program
                         
                          {
                         
                            static void Main(string[] args)
                         
                            {
                         
                            string path = @"C:\test";
                         
                            Directory.CreateDirectory(path);
                         
                            Console.WriteLine("ディレクトリを作成しました");
                         
                            }
                         
                          }
                         | 
testディレクトリが作成できたことが分かります。
他に、「DirectoryInfoクラス」を用いてもディレクトリを作成できます。
実際のソースコードを見てみましょう。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         
                          7
                         
                          8
                         
                          9
                         
                          10
                         
                          11
                         
                          12
                         
                          13
                         
                          14
                         
                          15
                         
                          16
                         
                          17
                         
                          18
                         
                          19
                         
                          20
                         | 
                          using System;
                         
                          using System.IO;
                         
                          public class Program
                         
                          {
                         
                            static void Main(string[] args)
                         
                            {
                         
                            string path = @"C:\test2";
                         
                            DirectoryInfo directoryInfo = new DirectoryInfo(path);
                         
                            directoryInfo.Create();
                         
                            Console.WriteLine("ディレクトリを作成しました");
                         
                            }
                         
                          }
                         | 
test2ディレクトリが作成できたことが分かります。
このように、「CreateDirectoryメソッド」または「DirectoryInfoクラス」のどちらを用いても、ディレクトリを作成することができます。
ディレクトリの存在確認
「C#」では、「Directory.Existsメソッド」を用いてディレクトリの存在確認をすることができます。
このメソッドをディレクトリ作成と組み合わせれば、PC上に存在していない場合のみ、新規のディレクトリを作成することができます。
実際のソースコードを見てみましょう。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         
                          7
                         
                          8
                         
                          9
                         
                          10
                         
                          11
                         
                          12
                         
                          13
                         
                          14
                         
                          15
                         
                          16
                         
                          17
                         
                          18
                         
                          19
                         
                          20
                         
                          21
                         
                          22
                         
                          23
                         
                          24
                         
                          25
                         
                          26
                         | 
                          using System;
                         
                          using System.IO;
                         
                          public class Program
                         
                          {
                         
                            static void Main(string[] args)
                         
                            {
                         
                            string path = @"C:\test";
                         
                            // ディレクトリが存在する
                         
                            if (Directory.Exists(path))
                         
                            {
                         
                            Console.WriteLine(path + "ディレクトリが既に存在するので作成しませんでした。");
                         
                            }
                         
                            // ディレクトリが存在しない
                         
                            else
                         
                            {
                         
                            Directory.CreateDirectory(path);
                         
                            Console.WriteLine(path + "ディレクトリを作成しました");
                         
                            }
                         
                            }
                         
                          }
                         | 
上記のような手順で、ディレクトリの存在を確認することができます。
ファイル一覧
「C#」では、「GetFiles」を用いて、指定パス配下のファイル一覧を取得することができます。
また、「GetDirectories」を用いれば、指定パス配下のディレクトリ一覧が取得でき、さらには「GetFileSystemEntries」を用いることで上記の2つを同時に取得できます。
実際のソースコードを見てみましょう。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         
                          7
                         
                          8
                         
                          9
                         
                          10
                         
                          11
                         
                          12
                         
                          13
                         
                          14
                         
                          15
                         
                          16
                         
                          17
                         
                          18
                         
                          19
                         
                          20
                         
                          21
                         
                          22
                         
                          23
                         
                          24
                         
                          25
                         
                          26
                         
                          27
                         
                          28
                         
                          29
                         
                          30
                         
                          31
                         
                          32
                         
                          33
                         
                          34
                         
                          35
                         
                          36
                         
                          37
                         
                          38
                         
                          39
                         | 
                          using System;
                         
                          using System.IO;
                         
                          public class Program
                         
                          {
                         
                            static void Main(string[] args)
                         
                            {
                         
                            string path = @"C:\test";
                         
                            string[] files = Directory.GetFiles(path);
                         
                            string[] dirs = Directory.GetDirectories(path);
                         
                            string[] files_dirs = Directory.GetFileSystemEntries(path);
                         
                            Console.WriteLine("ファイル一覧");
                         
                            foreach (string s in files)
                         
                            {
                         
                            Console.WriteLine(s);
                         
                            }
                         
                            Console.WriteLine("ディレクトリ一覧");
                         
                            foreach (string s in dirs)
                         
                            {
                         
                            Console.WriteLine(s);
                         
                            }
                         
                            Console.WriteLine("ファイル・ディレクトリ一覧");
                         
                            foreach (string s in files_dirs)
                         
                            {
                         
                            Console.WriteLine(s);
                         
                            }
                         
                            }
                         
                          }
                         | 
実際に、path配下にファイルやディレクトリを格納して実行してみましょう。各種一覧が取得できることが分かります。
ディレクトリのコピー
「C#」の「.NET Framework」には、ディレクトリをコピーするメソッドが用意されていません。
そのため、手動でディレクトリを作成し、配下にあるすべてのディレクトリとファイルを再帰的にコピーする必要があります。
実際のソースコードを見てみましょう。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         
                          7
                         
                          8
                         
                          9
                         
                          10
                         
                          11
                         
                          12
                         
                          13
                         
                          14
                         
                          15
                         
                          16
                         
                          17
                         
                          18
                         
                          19
                         
                          20
                         
                          21
                         
                          22
                         
                          23
                         
                          24
                         
                          25
                         
                          26
                         
                          27
                         
                          28
                         
                          29
                         
                          30
                         
                          31
                         
                          32
                         
                          33
                         
                          34
                         
                          35
                         
                          36
                         
                          37
                         
                          38
                         
                          39
                         
                          40
                         
                          41
                         
                          42
                         
                          43
                         
                          44
                         
                          45
                         
                          46
                         
                          47
                         
                          48
                         
                          49
                         
                          50
                         | 
                          using System;
                         
                          using System.IO;
                         
                          public class Program
                         
                          {
                         
                            static void Main(string[] args)
                         
                            {
                         
                             string copy_from = @"C:\test";
                         
                             string copy_to = @"C:\test2";
                         
                             CopyDirectory(copy_from, copy_to);
                         
                             Console.WriteLine("ディレクトリをコピーしました。");
                         
                            }
                         
                            public static void CopyDirectory(string copyFrom, string copyTo)
                         
                            {
                         
                             DirectoryInfo srcDirectory = new DirectoryInfo(copyFrom);
                         
                             DirectoryInfo dstDirectory = new DirectoryInfo(copyTo);
                         
                             // コピー先のディレクトリがなければ作成する
                         
                             if (!dstDirectory.Exists)
                         
                             {
                         
                              dstDirectory.Create();
                         
                              dstDirectory.Attributes = srcDirectory.Attributes;
                         
                             }
                         
                             // ファイルのコピー
                         
                             foreach (FileInfo fileInfo in srcDirectory.GetFiles())
                         
                             {
                         
                              // 同じファイルが存在していたら、常に上書きする
                         
                              fileInfo.CopyTo(dstDirectory.FullName + @"\" + fileInfo.Name, true);
                         
                             }
                         
                             // ディレクトリのコピー
                         
                             foreach (DirectoryInfo directoryInfo in srcDirectory.GetDirectories())
                         
                             {
                         
                              CopyDirectory(directoryInfo.FullName, dstDirectory.FullName + @"\" + directoryInfo.Name);
                         
                             }
                         
                            }
                         
                          }
                         | 
上記のようにディレクトリがコピーされます。
また、Windows環境であれば、C#から「Visual Basic」の機能を呼び出すことでディレクトリコピーできます。実際のソースコードを見てみましょう。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         
                          7
                         
                          8
                         
                          9
                         
                          10
                         
                          11
                         
                          12
                         
                          13
                         
                          14
                         
                          15
                         
                          16
                         
                          17
                         
                          18
                         | 
                          using Microsoft.VisualBasic.FileIO;
                         
                          public class Program
                         
                          {
                         
                            static void Main(string[] args)
                         
                            {
                         
                             string copy_from = @"C:\test";
                         
                             string copy_to  = @"C:\test2";
                         
                             FileSystem.CopyDirectory(copy_from, copy_to);
                         
                            }
                         
                          }
                         | 
このように、シンプルなソースコードによってディレクトリコピーができることが分かります。
ディレクトリの移動
「C#」では、「Directory.Moveメソッド」を用いてディレクトリを移動することができます。
実際のソースコードを見てみましょう。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         
                          7
                         
                          8
                         
                          9
                         
                          10
                         
                          11
                         
                          12
                         
                          13
                         
                          14
                         
                          15
                         | 
                          public class Program
                         
                          {
                         
                            static void Main(string[] args)
                         
                            {
                         
                             string move_from = @"C:\test";
                         
                             string move_to  = @"C:\test2";
                         
                             System.IO.Directory.Move(move_from, move_to);
                         
                            }
                         
                          }
                         | 
このプログラムを実行する際は、testディレクトリが存在し、test2ディレクトリが存在しない状態で行ってください。ディレクトリが移動されることが分かるでしょう。
なお、例外については説明を省きます。
ディレクトリの削除
「C#」では、「Directory.Deleteメソッド」用いてディレクトリを削除します。
実際のソースコードを見てみましょう。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         
                          7
                         
                          8
                         
                          9
                         
                          10
                         
                          11
                         
                          12
                         
                          13
                         
                          14
                         | 
                          public class Program
                         
                          {
                         
                            static void Main(string[] args)
                         
                            {
                         
                             string deleteDir = @"C:\test2";
                         
                             System.IO.Directory.Delete(deleteDir, true);
                         
                            }
                         
                          }
                         | 
この場合、test2ディレクトリが存在する状態で実行してください。ディレクトリが削除されることが分かります。
なお、例外については説明を省きます。
- システム
 エンジニア
- C#ではいろいろなディレクトリ操作ができるのですね。
- プロジェクト
 マネージャー
- C#はさまざまな操作ができ、コードも比較的簡単に書けるので、プログラミング初心者の方にはおすすめの言語です。
C#のディレクトリについて理解を深めよう
この記事では、「C#のディレクトリ」について実際のコードを参照にしながら解説してきましたが、いかがでしたでしょうか。
C#では、ここで記した「ディレクトリの作成」「一覧取得」「コピー」「移動」「削除」など、様々な操作ができます。コードも比較的簡単に書けるため、プログラミング初心者の方にはおすすめの言語とも言えるでしょう。
ぜひ、自分自身の手でC#のソースコードを書きながら、プログラミングへの理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
          
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
          数多くのエンジニアが集まります。

- 
              スマホアプリから業務系システムまで スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。 
- 
              充実した研修制度 毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。 
- 
              資格取得を応援 スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。 
- 
              東証プライム上場企業グループ オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。 安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。 
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
              まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


C#新着案件New Job
- 
              
              システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務月給29万~34万円東京都新宿区(新宿駅)
- 
              
              システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務月給41万~50万円東京都新宿区(新宿駅)
- 
              
              デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務月給29万~34万円神奈川県横浜市(桜木町駅)
- 
              
              デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務月給41万~50万円神奈川県横浜市(桜木町駅)
- 
              
              基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務月給29万~34万円東京都新宿区(西新宿駅)
- 
              
              基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務月給41万~50万円東京都新宿区(西新宿駅)





