2004年04月12日
川俣晶の縁側ソフトウェア技術雑記total 11134 count

.NET Frameworkのクラスライブラリでディレクトリの深い階層を作成する方法

Written By: 川俣 晶連絡先

 うっかりしてました。

 .NET Frameworkのクラスライブラリで予想外の動作に遭遇したので書いておきます。

 Win32 APIのCreateDirectoryなどを使って深いディレクトリを作成する場合、新しく作成される階層の数だけ、APIを呼び出す必要がありました。

 たとえば、ディレクトリc:\aが存在しない状況で、以下のようなプログラム(Visual C++による)を実行するとAPIは失敗し、ディレクトリは作成されません。

(各種宣言等は省略)

int _tmain(int argc, _TCHAR* argv[])

{

    BOOL result = CreateDirectory("c:\\a\\b\\c",NULL);

    printf( "result=%d", (int)result );

    return result;

}

 これを実行すると以下のような結果になります。

result=0

 ところが、C#で以下のようなプログラムを書いて実行すると同じ結果になりません。

(各種宣言等は省略)

[STAThread]

static void Main(string[] args)

{

    Directory.CreateDirectory("c:\\a\\b\\c");

}

 例外は発生せずに実行は終了し、なんと、ディレクトリc:\a\b\cが作成されているのです。

 実際にリファレンスからCreateDirectoryメソッドを引いてみると、以下のように書いてあります。

path で指定したすべてのディレクトリとサブディレクトリを作成します。

 とてもさりげないですが、「すべての」という部分が、上記のような動作を行う仕様であることを示しているようですね。

 思い通りにディレクトリを作成できていたので、ついうっかり、仕様を正しく確認しないで使っていました。おかげで、無駄なコードが入っているプログラムがあります。深いディレクトリを作成する際に、親ディレクトリを作成するようなコードです。

 何事も確認せずに正しいことは分からない、という教訓として受け止めておきましょう。

で、困った…… §

 ディレクトリが作成できないテストケースを、親ディレクトリがない条件でテストしようと思ったらできなかったので、というかディレクトリができてしまたので気付きました。ですが、結局、そのテストケースは実行不可能なので困った困った……。

Facebook

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20040412161258
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.