連載
» 2009年03月19日 05時00分 公開

.NET TIPS:作業フォルダのパスを取得/設定するには?[C#、VB]

[一色政彦,デジタルアドバンテージ]
「.NET TIPS」のインデックス

連載目次

 プログラムが実行される場所(=カレント・ディレクトリ。以降、作業フォルダ)は、必ずしも.exeファイルがある場所と同じとは限らない。これはコマンド・プロンプトでプログラム(.exeファイル)を実行するときには、よくあり得る(コマンド・プロンプトでは、例えば「cd」(Change Directory:ディレクトリの変更)というコマンドで、作業フォルダを移動できる)。この作業フォルダの変更は、特に相対パスでファイルにアクセスする場合や、短い相対パスでファイルにアクセスできるようにしたい場合などで役立つ。

 そこで本稿では、実行時にプログラムの作業フォルダのパスを取得/設定する方法を紹介する。

作業フォルダのパスを取得する方法

 まずは取得する方法だが、これには次のいずれかを使う(上が静的メソッド、下は静的プロパティ)。

  • Directory.GetCurrentDirectory()
  • Environment.CurrentDirectory

 Directoryクラス(System.IO名前空間)のGetCurrentDirectoryメソッドは引数を取らず、戻り値として作業フォルダのパスを文字列で返す。

 Environmentクラス(System名前空間)のCurrentDirectoryプロパティからは、作業フォルダのパスが文字列で取得できる。

作業フォルダのパスを設定する方法

 次に設定する方法だが、これには次のいずれかを使う(上が静的メソッド、下は静的プロパティ)。

  • Directory.SetCurrentDirectory(<作業フォルダのパス>)
  • Environment.CurrentDirectory

 Directory.GetCurrentDirectoryメソッドは引数として作業フォルダのパスを文字列で指定する。戻り値はない。

 先に示したEnvironment.CurrentDirectoryプロパティでは、作業フォルダのパスを文字列で設定することもできる。

作業フォルダのパスを設定/取得するサンプル

 次のコードは、実際にこれらのメソッドやプロパティを使ったコンソール・アプリケーションのサンプルだ。

using System;
using System.IO;

class Program
{
  static void Main()
  {
    // Directoryクラスの静的メソッドを使った例
    Directory.SetCurrentDirectory(@"C:\");
    string dirpath = Directory.GetCurrentDirectory();
    Console.WriteLine(dirpath);
    // 出力例:C:\

    // Environmentクラスの静的プロパティを使った例
    Environment.CurrentDirectory = @"C:\Windows";
    string envdir = Environment.CurrentDirectory;
    Console.WriteLine(envdir);
    // 出力例:C:\Windows
  }
}

Imports System.IO

Module Module1

  Sub Main()
    ' Directoryクラスの静的メソッドを使った例
    Directory.SetCurrentDirectory("C:\")
    Dim dirpath As String = Directory.GetCurrentDirectory()
    Console.WriteLine(dirpath)
    ' 出力例:C:\

    ' Environmentクラスの静的プロパティを使った例
    Environment.CurrentDirectory = "C:\Windows"
    Dim envdir As String = Environment.CurrentDirectory
    Console.WriteLine(envdir)
    ' 出力例:C:\Windows
  End Sub

End Module

作業フォルダのパスを設定/取得するサンプル(上:C#、下:VB)

 作業フォルダのパスを取得すると、取得したディレクトリ名の末尾には常に「\」が付かないようだ。一方、ドライブ名のルート・ディレクトリには必ず「\」が付く。作業フォルダの設定時には、「C:」のようにドライブ名のみを指定することはできない。これを行うと、Directory.SetCurrentDirectoryメソッドでは例外が発生し、Environment.CurrentDirectoryプロパティも挙動がおかしくなるようだ。

カテゴリ:クラス・ライブラリ 処理対象:パス
使用ライブラリ:Directoryクラス(System.IO名前空間)
使用ライブラリ:Environmentクラス(System名前空間)


「.NET TIPS」のインデックス

.NET TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。