ファイルのパスをフォルダ名とファイル名に分離し、フォルダ名のみ取得するにはSystem.IO.Path.GetDirectoryName()を使用します。例外やNULLを返す場合があるので注意が必要です。
サンプルコード
-
C#
string directoryName = System.IO.Path.GetDirectoryName(path);
-
VB.NET
Dim directoryName As String = System.IO.Path.GetDirectoryName(path)
GetDirectoryNameを使用する際の注意
- 空文字列を指定すると例外が発生しますが、nullを渡しても例外は発生しません。
- nullを返す場合と空文字列を返す場合があります。
- ネットワークパスで始まる場合、パス中にフォルダが無いとnullを返します。
- パスで使えない文字を渡すと例外が発生します。
GetDirectoryNameに渡した文字列 | 結果 | 備考 |
---|---|---|
(空文字列) | 例外 System.ArgumentException パスの形式が無効です。 | |
(null) | (null) | |
test | (空文字列) | |
c:\ | (null) | |
c:\test | c:\ | |
c:\test\ | c:\test | |
c:\test\. | c:\test | |
c:\test\.. | c:\test | |
c:\test\memo.txt | c:\test | |
c:\test\memo.txt\ | c:\test\memo.txt | |
c:\test\..\test\memo.txt | c:\test\..\test | |
c:\test\..\test\memo.txt\ | c:\test\..\test\memo.txt | |
. | (空文字列) | |
.\ | . | |
.\test | . | |
.\test\ | .\test | |
.\test\memo.txt | .\test | |
.\test\memo.txt\ | .\test\memo.txt | |
.\test\..\test\memo.txt | .\test\..\test | |
.\test\..\test\memo.txt\ | .\test\..\test\memo.txt | |
.. | (空文字列) | |
..\ | .. | |
..\test | .. | |
..\test\ | ..\test | |
..\test\memo.txt | ..\test | |
..\test\memo.txt\ | ..\test\memo.txt | |
..\test\..\test\memo.txt | ..\test\..\test | |
..\test\..\test\memo.txt\ | ..\test\..\test\memo.txt | |
\\networkPC\ | (null) | |
\\networkPC\test | (null) | "c:\test"や".\test"と挙動が異なる |
\\networkPC\test\ | \\networkPC\test | |
\\networkPC\test\memo.txt | \\networkPC\test | |
\\networkPC\test\memo.txt\ | \\networkPC\test\memo.txt | |
\\networkPC\test\..\test\memo.txt | \\networkPC\test\..\test | |
\\networkPC\test\..\test\memo.txt\ | \\networkPC\test\..\test\memo.txt | |
パスで使えない文字を含む | 例外「System.ArgumentException "パスに無効な文字が含まれています。"」 |
検証環境
- Microsoft Visual Studio 2008 Version 9.0.30729.4462 QFE Edition: Professional
- Microsoft .NET Framework Version 3.5 SP1
- Microsoft Windows 7 Professional Service Pack 1 (Microsoft Windows NT 6.1 (7601))