プログラムが実行される場所(=カレント・ディレクトリ。以降、作業フォルダ)は、必ずしも.exeファイルがある場所と同じとは限らない。これはコマンド・プロンプトでプログラム(.exeファイル)を実行するときには、よくあり得る(コマンド・プロンプトでは、例えば「cd」(Change Directory:ディレクトリの変更)というコマンドで、作業フォルダを移動できる)。この作業フォルダの変更は、特に相対パスでファイルにアクセスする場合や、短い相対パスでファイルにアクセスできるようにしたい場合などで役立つ。
そこで本稿では、実行時にプログラムの作業フォルダのパスを取得/設定する方法を紹介する。
まずは取得する方法だが、これには次のいずれかを使う(上が静的メソッド、下は静的プロパティ)。
Directoryクラス(System.IO名前空間)のGetCurrentDirectoryメソッドは引数を取らず、戻り値として作業フォルダのパスを文字列で返す。
Environmentクラス(System名前空間)の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:」のようにドライブ名のみを指定することはできない。これを行うと、Directory.SetCurrentDirectoryメソッドでは例外が発生し、Environment.CurrentDirectoryプロパティも挙動がおかしくなるようだ。
カテゴリ:クラス・ライブラリ 処理対象:パス
使用ライブラリ:Directoryクラス(System.IO名前空間)
使用ライブラリ:Environmentクラス(System名前空間)
Copyright© Digital Advantage Corp. All Rights Reserved.