.NET FrameworkのSystem.IO.Directory.CreateDirectoyメソッドは、漠然とした予測を裏切って、複数階層を一括で作ってくれたり、既にディレクトリが存在する場合は何もせずに戻ってきたりします。
機能面では、単に上記メソッドを呼ぶだけで実現できます。しかし、それが本当に最速でしょうか? 呼び出される回数が多い場合は、速度が気になります。たとえば、先にSystem.IO.Directory.Existsメソッドで存在チェックを行った方が速いということがありえるでしょうか?
using System;
using System.IO;
namespace ConsoleApplication46
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
string target = @"d:\delme\a\b\c\d\テスト\"
+ @"長い長い長い長い長い\"
+ @"名前名前名前名前名前名前名前名前";
Directory.CreateDirectory(target);
const int count = 100000;
DateTime start1 = DateTime.Now;
for(int i=0; i<count; i++ )
{
Directory.Exists(target);
}
DateTime end1 = DateTime.Now;
TimeSpan span1 = end1.Subtract(start1);
Console.WriteLine(span1);
DateTime start2 = DateTime.Now;
for(int i=0; i<count; i++ )
{
Directory.CreateDirectory(target);
}
DateTime end2 = DateTime.Now;
TimeSpan span2 = end2.Subtract(start2);
Console.WriteLine(span2);
}
}
}
呼び出し回数が多い場合、たとえ機能面でSystem.IO.Directory.CreateDirectoyメソッドが完全に期待通りの動作するとしても、先にSystem.IO.Directory.Existsメソッドを呼んで、既にある場合にはSystem.IO.Directory.CreateDirectoyメソッドを呼ばないようにする方が高速になるかもしれません。