C#のディレクトリ作成をマスターしよう!
- システム
エンジニア - ディレクトリを作るにはどうすればいいのでしょうか?
- プロジェクト
マネージャー - ディレクトリは古くから使われているもので、ファイルと同じ役割をしています。作成方法をこの記事でご紹介します。
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の方が記述が簡潔になるでしょう。
- システム
エンジニア - Directoryクラスを使うことで、色々とディレクトリを変えることが出来るのですね。
- プロジェクト
マネージャー - DirectoryだけでなくDirectoryInfoと使い分けながらディレクトリを作ってみるといいでしょう。
C#のディレクトリ作成をしてみよう
C#のディレクトリ作成について説明しましたが、いかがでしたでしょうか。DirectoryとDirectoryInfoを使用する2つの方法がありますが、状況に応じて使い分けましょう。
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万円東京都新宿区(西新宿駅)