ファイルのパス文字列(フルパス)からディレクトリ・パス(=ディレクトリ名)の部分を取り出すには、Pathクラス(System.IO名前空間)のGetDirectoryNameメソッドを使用する。
例えば、次のように記述してこのメソッドを呼び出せば、その戻り値として「c:\windows\system32」という文字列が得られる(VBの場合の記述例)。
Path.GetDirectoryName("c:\windows\system32\notepad.exe")
パラメータで指定したパス文字列のファイルが実際に存在するかどうかはチェックされない。このメソッドは単に、パス文字列中の最後のパス区切り文字「\」より前にある部分文字列を返すだけである。
正確には、「\」以外にも「/」が、このメソッドではパスの区切り文字として認識される(また、ドライブ名の後に続く「:」もパスの区切り文字となる)。ただし区切り文字に識別された「/」は、(なぜか)「\」に変換されてしまうので注意が必要だ。例えば、「http://atmarkit.itmedia.co.jp/fdotnet/index.html」は、「http:\atmarkit.itmedia.co.jp\fdotnet」という戻り値になってしまうので、現実的は「/」を区切り文字として識別させてディレクトリ・パス部分を取得するようなことはできないと考えた方がよいだろう。
次のサンプル・プログラムは、それぞれの区切り文字を含んだ3つの文字列からディレクトリ・パス部分を取り出すコンソール・アプリケーションである。
using System;
using System.IO;
class Program
{
static void Main(string[] args)
{
// 「\」が区切り文字
string path1 = @"c:\windows\system32\notepad.exe";
string dir1 = Path.GetDirectoryName(path1);
Console.WriteLine(dir1);
// 出力例:c:\windows\system32
// 「/」が区切り文字
string path2 = "http://atmarkit.itmedia.co.jp/fdotnet/index.html";
string dir2 = Path.GetDirectoryName(path2);
Console.WriteLine(dir2);
// 出力例:http:\atmarkit.itmedia.co.jp\fdotnet
// ドライブ名に続く「:」が区切り文字
string path3 = "c:notepad.exe";
string dir3 = Path.GetDirectoryName(path3);
Console.WriteLine(dir3);
// 出力例:c:
}
}
Imports System.IO
Module Module1
Sub Main()
' 「\」が区切り文字
Dim path1 As String = "c:\windows\system32\notepad.exe"
Dim dir1 As String = Path.GetDirectoryName(path1)
Console.WriteLine(dir1)
' 出力例:c:\windows\system32
' 「/」が区切り文字
Dim path2 As String = "http://atmarkit.itmedia.co.jp/fdotnet/index.html"
Dim dir2 As String = Path.GetDirectoryName(path2)
Console.WriteLine(dir2)
' 出力例:http:\atmarkit.itmedia.co.jp\fdotnet
' ドライブ名に続く「:」が区切り文字
Dim path3 As String = "c:notepad.exe"
Dim dir3 As String = Path.GetDirectoryName(path3)
Console.WriteLine(dir3)
' 出力例:c:
End Sub
End Module
なお、指定したパス文字列がルート・ディレクトリ(例えば「C:\」)の場合には、戻り値としてnull(C#の場合。VBではNothing)が返されるので注意が必要だ。
カテゴリ:クラス・ライブラリ 処理対象:パス
使用ライブラリ:Pathクラス(System.IO名前空間)
関連TIPS:パス文字列からファイル名部分を取り出すには?
Copyright© Digital Advantage Corp. All Rights Reserved.