.net column

.NET開発者のためのブログメディア

C#のディレクトリ作成をマスターしよう!

2020年07月09日
SE
ディレクトリを作るにはどうすればいいのでしょうか?
PM
ディレクトリは古くから使われているもので、ファイルと同じ役割をしています。作成方法をこの記事でご紹介します。

C#のディレクトリ作成とは

 

ディレクトリと聞いても意味が分からない人もいるのではないでしょうか。フォルダと同じ意味で、ファイルをしまう入れ物のことです。WindowsやMacではフォルダと言いますが、UNIXなどではディレクトリといい、古くから使われています。

C#はWindowsだけではなく、全てのプラットフォームで使用することを想定しているため、フォルダでなくディレクトリという言葉を使用しています。今回は、C#によるディレクトリ作成の方法を紹介するので、是非ご覧ください。

Directoryクラスでディレクトリを作成

C#のディレクトリ作成には、Directoryクラスを使用します。以下を実行することで、Cドライブのtestディレクトリにsubdirというディレクトリ作成ができます。なお、実行する場合はソースの先頭に「using System.IO;」を記述してください。

Directory.CreateDirectory(“”c:\\test\\subdir””);

もしtestディレクトリが無かった場合は、testディレクトリ作成も同時に行われます。またパラメータが””c:\test\subdir””ではない理由は、C#の文字列で\がエスケープシーケンスという特別な意味を持つため、\を2つ記述し、それを打ち消す必要があるからです。

CreateDirectoryのパラメータが不適切だったら?

もし、CreateDirectoryのパラメータの文字列が正しくない場合は、どうなるのでしょうか。例えば、以下のように存在しないZドライブを指定して実行すると、

Directory.CreateDirectory(“”z:\\test\\subdir””);

以下のように例外(exception)が発生し、異常終了してしまいます。

Unhandled exception. System.IO.DirectoryNotFoundException: Could not find a part of the path ‘z:\test\subdir’.(以下略)

例外による異常終了を防ぐには?

例外を防ぐ一般的な方法は、try~catchで囲むことです。以下がC#のサンプルです。

try
{
Directory.CreateDirectory(“”z:\\test\\subdir””);
}
catch (System.Exception e)
{
System.Console.WriteLine(e.Message);
}

try節で例外が発生するとcatchに飛び、後処理を行ってから、先に進めることができます。ファイル処理のようにプログラムの外部にアクセスをする場合は、必ずtry~catchを使用しましょう。

Directoryでディレクトリの移動や削除も可能

C#のDirectoryクラスは、ディレクトリ作成だけでなく、移動や削除も可能です。以下のC#のサンプルを実行すると、

Directory.CreateDirectory(“”c:\\test\\subdir\\subsubdir””);
Directory.Move(“”c:\\test\\subdir””,””c:\\test2″”);

test\subdir\subsubdirというディレクトリ作成が行われ、その後にtest\subdirの中身がtest2に移動します。ディレクトリ内にファイルがある場合、それも一緒に移動できます。

削除する場合は以下のように行います。

Directory.CreateDirectory(“”c:\\test\\subdir\\subsubdir””);
Directory.Delete(“”c:\\test\\subdir\\subsubdir””);

このC#のサンプルを実行すると、test\subdir\subsubdirが作成された後に、subsubdirが削除されます。ディレクトリ内にファイルがある場合は、一緒に削除されてしまうので注意しましょう。

Directoryでディレクトリの日付の更新も可能

Directoryクラスは、ディレクトリの作成日付を取得することができます。以下のC#サンプルを実行すると、

Directory.CreateDirectory(“”c:\\test\\subdir””);
System.Console.WriteLine(Directory.GetCreationTime(“”c:\\test\\subdir””));

以下のように作成日時が表示されます。

2020/06/05 14:41:49

さらに、以下のようにDateTime構造体を使うことで、ディレクトリの日付の更新もできます。

Directory.CreateDirectory(“”c:\\test\\subdir””);
Directory.SetCreationTime(“”c:\\test\\subdir””, new System.DateTime(2000, 2, 12, 2, 22, 32));

上のC#サンプルを実行すると、subdirがディレクトリに作成されます。その作成日付を見ると、2000年2月12日2時22分32秒になっています。こういった日付を操作するのは、一般的に望ましいことではないですが、役に立つ時もあるでしょう。

DirectoryInfoでディレクトリ情報を取得

Directory.CreateDirectoryでディレクトリの作成を行うと、DirectoryInfoクラスのインスタンスを返り値として取得できます。これにより、作成したディレクトリの情報を見ることができます。

DirectoryInfo di = Directory.CreateDirectory(“”c:\\test\\subdir””);
System.Console.WriteLine(di.FullName); // フルパス名
System.Console.WriteLine(di.Parent); // 親ディレクトリ
System.Console.WriteLine(di.CreationTime); //作成日付

上のサンプルを実行するとディレクトリの作成が行われ、以下が表示されます。

c:\test\subdir
c:\test
2020/06/05 15:02:10

親のディレクトリは有効な情報として役立つでしょう。

DirectoryInfoでもディレクトリ作成が可能

実はDirectoryInfoでもディレクトリ作成は可能です。以下を実行すると、ディレクトリが作成されます。

DirectoryInfo di = new DirectoryInfo(“”c:\\test\\subdir””);
di.Create();

DirectoryクラスとDirectoryInfoクラスは、重複している機能が多いのですが、DirectoryInfoはインスタンスを生成するため、ディレクトリを作成した後にさらに処理を続ける場合は、DirectoryInfoの方が使いやすいでしょう。

既にディレクトリが存在するかどうかをチェックする

ここまでのディレクトリ作成のサンプルでは、作成しようとした名前のディレクトリが既に存在する場合、上書きして新しい日付で作成されていました。ディレクトリが無い時だけ、作成するにはどうすれば良いのでしょうか。下記にサンプルがあるので、参考にしてください。

DirectoryInfo di = new DirectoryInfo(“”c:\\test\\subdir””);
if (!di.Exists)
{
di.Create();
}

Existsメソッドがfalseの場合は、ディレクトリが存在せず、その時だけCreateすればいいわけです。

Directoryでもディレクトリの存在チェックは可能

上記と同じように、Directoryクラスでも可能です。以下のようにします。

string path = “”c:\\test\\subdir””;
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}

しかし、こういった1つのディレクトリに対して色々な処理を行う場合は、インスタンスを生成するDirectoryInfoの方が記述が簡潔になるでしょう。

SE
Directoryクラスを使うことで、色々とディレクトリを変えることが出来るのですね。
PM
DirectoryだけでなくDirectoryInfoと使い分けながらディレクトリを作ってみるといいでしょう。

C#のディレクトリ作成をしてみよう

C#のディレクトリ作成について説明しましたが、いかがでしたでしょうか。DirectoryとDirectoryInfoを使用する2つの方法がありますが、状況に応じて使い分けましょう。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)